Day 8 面向对象
生活随笔
收集整理的這篇文章主要介紹了
Day 8 面向对象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對象,是對事物的抽象,包含了事物的一些屬性,和動作。
類示例
class Person(object):# 定義基本屬性, 外部可訪問name = ''# 定義保護屬性,只有類本身和子類可以訪問_sex = 'male'# 定義私有屬性,只有類本身可以訪問__weight = 0# __init__是一個特殊方法用于在創建對象時進行初始化操作# 通過這個方法我們可以為學生對象綁定name和age兩個屬性def __init__(self, name, age):self.name = nameself.age = age# 方法之間要空出一行(編碼規范)def speak(self, message):print("%s 說: %d。" % (self.name, message))# 方法名用全小寫多個單詞用下劃線連接(編碼規范)def watch_av(self):if self.age < 18:print('%s只能觀看《熊出沒》.' % self.name)else:print('%s正在觀看動作片.' % self.name)# 和上面代碼有縮進差別,要空出兩行(編碼規范) def main():# 創建Person對象并指定姓名和年齡p1 = Person('駱昊', 38)# 調用對象方法speak, 并傳入參數p1.speak('我要學Python')# 調用對象方法 watch_avp1.watch_av()?
繼承
class Student(Person):grade = ''# 子類的構造函數def __init__(self, n, a, g):# 調用父類的構造函數Person.__init__(self, n, a)self.grade = g# 覆寫父類的方法def speak(self, message):print("%s 說: %d ,我已經在讀 %d 年級" % (self.name, message, self.grade))def main2():# 創建學生對象并指定姓名和年齡stu1 = Student('王峰', 18)# 調用對象方法speak, 并傳入參數, 因為復寫了父類方法,所以以子類格式輸出stu1.speak('我要學Python')?
@property裝飾器
@property包裝器來包裝getter和setter方法,使得對屬性的訪問既安全又方便.
把一個getter方法變成屬性,只需要加上@property。?此時,@property本身又創建了另一個裝飾器@age.setter,負責把一個setter方法變成屬性賦值,于是,我們就擁有一個可控的屬性操作:
?
class Person(object):def __init__(self, name, age):self._name = nameself._age = age# 訪問器 - getter方法 @propertydef name(self):return self._name# 訪問器 - getter方法 @propertydef age(self):return self._age# 修改器 - setter方法 @age.setterdef age(self, age):self._age = agedef play(self):if self._age <= 16:print('%s正在玩飛行棋.' % self._name)else:print('%s正在玩斗地主.' % self._name)def main():person = Person('王大錘', 12)person.play()person.age = 22__slots__
class Cat(object):passdef test():cat = Cat()cat.name = "小黑"print(cat.name)# python 是動態語言,所以類Cat 沒有任何屬性, 當賦值后也會新創建一個屬性 test()為了限制類只能使用自己想要得幾個屬性,可以使用__slots__
class Cat(object):__slots__ = ('name', 'age')類Cat 只能使用屬性,name, age
靜態函數
使用 @staticmethod 標記方法,使用時不需要實例化。 class Triangle(object):def __init__(self, a, b, c):self._a = aself._b = bself._c = c# 靜態方法 @staticmethoddef is_valid(a, b, c):return a + b > c and b + c > a and c + a > bif __name__ == '__main__':Triangle.is_valid((3,4,5))?
類函數
使用 @classmethod標記方法 class Clock(object):"""數字時鐘"""def __init__(self, hour=0, minute=0, second=0):self._hour = hourself._minute = minuteself._second = second@classmethoddef now(cls): # cls 表示當前類ctime = localtime(time())return cls(ctime.tm_hour, ctime.tm_min, ctime.tm_sec) # 相當于調用類的構造函數?
?
轉載于:https://www.cnblogs.com/greatX/p/10930598.html
總結
以上是生活随笔為你收集整理的Day 8 面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员,选择和努力哪个重要?
- 下一篇: 关于Jdk7与Jdk8对Collecti