python day18--面向物件,繼承
阿新 • • 發佈:2018-12-05
# class Animal: # breath = '呼吸' # # def __init__(self, name, sex, age): # self.name = name # self.sex = sex # self.age = age # # def eat(self): # print(self) # print('動物都需要進食....') # # # class Person(Animal): # 括號裡面的 父類,基類,超類 括號外面的 子類,派生類. # pass# # # class Cat: # pass # # # class Dog: # pass # # # p1 = Person('alex', 'laddyboy', 1000) # print(p1.__dict__) # 初識繼承: # 子類以及子類例項化的物件 可以訪問父類的任何方法或變數. # 類名可以訪問父類所有內容 # print(Person.breath) # Person.eat(111) # 子類例項化的物件也可以訪問父類所有內容 # print(p1.breath) # print(p1) # p1.eat()
class Animal:def __init__(self, name, sex, age): self.name = name self.sex = sex self.age = age def eat(self): print('%s吃' % (self.name)) def drink(self): print('%s喝東西' % (self.name)) class Cat(Animal): def miaow(self): print('喵喵叫') # def eat(self): # 只執行自己類中的方法# print(666) class Brid(Animal): def __init__(self, name,sex,age,wing): # self b1物件 name '鸚鵡',sex '公',age 20, wing '綠翅膀' ''' self=b1物件 name='鸚鵡' sex='公' age= 20, wing='綠翅膀' ''' # Animal.__init__(self, name, sex, age) super().__init__(name,sex,age) # super(Brid,self).__init__(name,sex,age) self.wing = wing def bark (self): print('嗷嗷叫') def eat(self): super().eat() print('鳥吃蟲子...') class Chook(Animal): def crow(self): print('大爺laiwanya') # cat1 = Cat('tom','公', 3) # # cat1.eat() # 只執行父類的方法:子類中不要定義與父類同名的方法 # 只執行子類的方法:在子類建立這個方法. # 既要執行子類的方法,又要執行父類的方法? # 有兩種解決方法. # 1,Animal.__init__(self, name, sex, age) # 1,super().__init__(name,sex,age) # cat1 = Cat('tom','公', 3,)
# 繼承的進階
# 繼承: 單繼承,多繼承.
# 類: 經典類, 新式類
# 新式類: 凡是繼承object類都是新式類.
# python3x 所有的類都是新式類,因為python3x中的類都預設繼承object.
# class A:
# pass
# 經典類: 不繼承object類都是經典類
#python2x:(既有新式類,又有經典類) 所有的類預設都不繼承object類,所有的類預設都是經典類.你可以讓其繼承object.
# 單繼承: 新式類,經典類查詢順序一樣.
# 多繼承:
# 新式類: 遵循廣度優先.
# 經典類: 遵循深度優先.
# 多繼承的新式類 廣度優先 : 一條路走到倒數第二級,判斷,如果其他路能走到終點,則返回走另一條路.如果不能,則走到終點.
# class A: # def func(self): # print('IN A') # # class B(A): # pass # # def func(self): # # print('IN B') # # class C(A): # pass # # def func(self): # # print('IN C') # # class D(B): # pass # # def func(self): # # print('IN D') # # class E(C): # pass # # def func(self): # # print('IN E') # # class F(D,E): # pass # # def func(self): # # print('IN F') # # f1 = F() # f1.func() # class A: # def func(self): # print('IN A') # # class B(A): # pass # # def func(self): # # print('IN B') # # class C(A): # pass # # def func(self): # # print('IN C') # # class D(B): # pass # # def func(self): # # print('IN D') # # class E(C): # def func(self): # print('IN E') # # class F(D,E): # pass # # def func(self): # # print('IN F') # # f1 = F() # f1.func() # # print(F.mro()) # 查詢類的繼承順序
# 多繼承的經典類 深度優先 : 一條路走到底.