Python面向對象之繼承
阿新 • • 發佈:2018-07-26
main __init__ argv .com 實例 obj 對象 name 經典
繼承: 單繼承和多繼承 1.初識 class Father(object): #如果不寫object默認繼承 pass class Son(Father): #括號裏面的稱為:父類或基類或超類 括號外面的稱為:子類或派生類 pass class Animal: breath = ‘呼吸‘ def __init__(self, name, sex, age): self.name = name self.sex = sex self.age = age def eat(self):print(self)#111 #<__main__.Person object at 0x111ac3710> print(‘動物都需要進食....‘) class Person(Animal): pass print(Person.breath)#呼吸 Person.eat(111)#動物都需要進食.... p1 = Person(‘Jake‘, ‘男‘, 20) print(p1.breath)#呼吸 print(p1)#<__main__.Person object at 0x111ac3710> p1.eat()#動物都需要進食....結果: 呼吸 111 動物都需要進食.... 呼吸 <__main__.Person object at 0x111ac3710> <__main__.Person object at 0x111ac3710> 動物都需要進食.... 總結: 子類以及子類實例化的對象,可以訪問父類的任何方法和變量。 類名可以訪問父類的所有內容。 子類實例化的對象也可以訪問父類所有內容。 只執行父類的方法:子類中不要定義與父類同名的方法 只執行子類的方法:在子類創建這個方法. 既要執行子類的方法,又要執行父類的方法? 有兩種解決方法.1.通過類名。2.通過super()函數 1,Animal.__init__(self, name, sex, age) 2,super().__init__(name,sex,age) class Animal: breath = ‘呼吸‘ def __init__(self, name, sex, age): self.name = name self.sex = sex self.age = age def eat(self, argv): print(‘%s吃%s‘ % (self.name, argv)) class Person(Animal): def __init__(self, name,sex,age,wing): # Animal.__init__(self, name, sex, age) super().__init__(name,sex,age) # super(Brid,self).__init__(name,sex,age) self.wing = wing def eat(self,argv): super().eat(argv) print(‘吃...‘) p1 = Person(‘鸚鵡‘,‘男‘,20,‘綠翅膀‘) print(p1.__dict__) p1.eat(‘金蟬‘) 結果: {‘name‘: ‘鸚鵡‘, ‘sex‘: ‘男‘, ‘age‘: 20, ‘wing‘: ‘綠翅膀‘} 鸚鵡吃金蟬 吃... 2.進階 類: 經典類, 新式類 新式類: 凡是繼承object類都是新式類. python3x 所有的類都是新式類,因為python3x中的類都默認繼承object. 經典類: 不繼承object類都是經典類 python2x:(既有新式類,又有經典類) 所有的類默認都不繼承object類, 所有的類默認都是經典類.你可以讓其繼承object. 單繼承: 新式類,經典類查詢順序一樣. 多繼承: 新式類: 遵循廣度優先. 經典類: 遵循深度優先. 多繼承的新式類 廣度優先 : 一條路走到倒數第二級,判斷,如果其他路能走到終點,則返回走另一條路.如果不能,則走到終點. 多繼承的經典類 深度優先 : 一條路走到底.
Python面向對象之繼承