python_day_18 類: 新式類(python3x), 經典類(python2). 單繼承; 新式類經典類一樣. 多繼承: 新式類:廣度優先 類名.mro() 新式類. 經典類:深度優先. 定義一個Animal類,寫三個類:貓,狗,雞,,每個類中都有吃喝自己的方法 執行順序: ...
python_day_18
1,面向對象的三大特性是什麼?
繼承,多態,封裝
2,什麼是面向對象的新式類?什麼是經典類?
凡是繼承object類都是新式類.
凡是不繼承object類都是經典類.
3,面向對象為什麼要有繼承?繼承的好處是什麼?
因為繼承可以訪問父類的任何方法或變數.
好處:a,提高了代碼的復用性 b:提高了代碼的維護性 c:讓類與類之間產生了關係,是多態的前提
4,面向對象的廣度優先,深度優先分別是什麼?(只能是兩類情況)
廣度優先 : 一條路走到倒數第二級,判斷,如果其他路能走到終點,則返回走另一條路.如果不能,則走到終點.
深度優先 : 一條路走到底.
5.面向對象中super的作用。
既執行本類又執行父類的方法, 既執行本類又執行父類的方法
類:
- 新式類(python3x),
- 經典類(python2).
單繼承;
新式類經典類一樣.
多繼承:
新式類:廣度優先 類名.mro() 新式類.
經典類:深度優先.
初識繼承:
子類以及子類實例化的對象 可以訪問父類的任何方法或變數.
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(p1.breath) print(p1) p1.eat() # 類名可以訪問父類所有內容 print(Person.breath) Person.eat(11) 查詢順序見下圖:
定義一個Animal類,寫三個類:貓,狗,雞,,每個類中都有吃喝自己的方法
class Animal: def __init__(self, name, sex, age): self.name = name self.sex = sex self.age = age def eat(self,a1): print('%s吃%s' % (self.name,a1)) 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,argv): super().eat(argv) print('鳥吃蟲子...') class Chook(Animal): def crow(self): print('大爺laiwanya') cat1 = Cat('tom','公', 3) # 只執行子類的方法:在子類創建這個方法. cat1.eat() # 只執行父類的方法:子類中不要定義與父類同名的方法 # 既要執行子類的方法,又要執行父類的方法? # 有兩種解決方法. #1,Animal.__init__(self, name, sex, age) #2,super().__init__(name,sex,age) b1 = Brid('鸚鵡','公',20,'綠翅膀') print(b1.__dict__) b1.eat('金蟬')
廣度優先 : 一條路走到倒數第二級,判斷,如果其他路能走到終點,則返回走另一條路.如果不能,則走到終點.
深度優先 : 一條路走到底.
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()
執行順序:
print(F.mro()) # 查詢類的繼承順序