1. 程式人生 > >Python面向對象之繼承

Python面向對象之繼承

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面向對象之繼承