日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

day 17

發(fā)布時間:2024/1/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day 17 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

今日內(nèi)容大綱

01昨日內(nèi)容回顧

02作業(yè)講解

03繼承

?

繼承

面向?qū)ο笕筇卣?#xff1a;繼承,封裝,多態(tài)

在OOP(Object Oriented Programming)程序設(shè)計中,當(dāng)我們定義一個class的時候,可以從某個現(xiàn)有的class?繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Base class、Super class)。

class Animal:def __init__(self,name,sex,age):self.name=nameself.sex=sexself.age=agedef eat(self):print('都會吃。。。')class Person(Animal):pass

p1=Person('alex','male',20)
p2=Animal('jinxing','male',18)
p1.eat()      #子類以及子類實例化的對象可以訪問父類的任何方法和變量
print(p1.name)  #結(jié)果是:alex

Person.eat(11)  #類名可以訪問父類的所有內(nèi)容

繼承有什么好處?最大的好處是子類獲得了父類的全部屬性及功能。上述例子中Person繼承了Animal,則Person中就可以直接使用Animal中的eat方法

在實例化一個Person的時候,子類繼承了父類的構(gòu)造函數(shù),就需要提供父類三個屬性變量name,sex和age

繼承還可以一級一級的繼承

?

問題來了:子類中有一個eat方法,父類中也有一個eat方法,那么在實例化對象之后調(diào)用eat方法到底是子類中的還是父類中的呢?我想既要執(zhí)行子類的方法,又要執(zhí)行父類的方法,該怎么做?

上節(jié)課講的查詢順序我們可以知道,實例化一個Person對象的時候,用那個實例化出來的對象通過.來調(diào)用時,會先從子類中查找eat方法,子類中沒有再從父類查找

代碼如下:

class Animal:def __init__(self,name,sex,age):self.name=nameself.sex=sexself.age=agedef eat(self):print('都會吃。。。')class Person(Animal):def eat(self):#1.Animal.eat(self)#2.super().eat()print('人吃東西...')p1 = Person('jiang','male',20) p1.eat()

有兩種方法可以解決,第一種是在子類的eat方法中添加Animal.eat(self).這時就會先調(diào)用父類的eat方法

第二種是在子類的eat方法中添加super().eat()。功能一樣但是一般用這種方法

?

問題二:動物有些屬是特有的,該如何添加這些特有的屬性?

代碼如下:

class Animal:def __init__(self,name,sex,age):self.name=nameself.sex=sexself.age=agedef eat(self):print('都能吃')def drink(self):print('都能喝') class Dog(Animal):def hit(self):print('狗會咬人')class Bird(Animal):def __init__(self,name,sex,age,wing):#self接收的是b1對象#Animal.__init__(self,name,sex,age) #一般不用這種方法super(Bird,self).__init__(name,sex,age)#super().__init__(name,sex,age)self.wing=wingdef miao(self):print('嗷嗷叫')def eat(self):#super().eat()#Animal.eat(self)print('%s會吃...'%self.name)#既要執(zhí)行子類的方法,又要執(zhí)行父類的方法#1.#Animal.__init__(self,name,sex,age)#2.super().__init__(name,sex,age) b1 = Bird('鸚鵡','',10,'綠翅膀') 繼承的進(jìn)階: #類:經(jīng)典類,新式類
#新式類:凡是繼承object類都是新式類
#python3中,所有的類都是新式類
#因為python3中的類都默認(rèn)繼承object

#經(jīng)典類:不繼承object類都是經(jīng)典類(python3中不存在)
#python2中既有新式類,又有經(jīng)典類,所有的類默認(rèn)都不繼承object,所有的類默認(rèn)都是經(jīng)典類


#單繼承:新式類,經(jīng)典類查詢順序一樣
#多繼承:
#新式類:遵循廣度優(yōu)先
#經(jīng)典類:遵循深度優(yōu)先 #多繼承的新式類 廣度優(yōu)先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):#passdef func(self):print('IN E') class F(D,E,C):passf1 = F() f1.func() print(F.mro()) #可以查詢類的繼承順序
廣度優(yōu)先:F->D->B->E->C->A
#多繼承的經(jīng)典類 深度優(yōu)先:一條路走到底

?

轉(zhuǎn)載于:https://www.cnblogs.com/hongweijiang/p/10862676.html

總結(jié)

以上是生活随笔為你收集整理的day 17的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。