class a(): # 這是父親類
def hello(self):
print("我是父類")
class b(a): # 我是兒子類,繼承了父類的性格
def __init__(self):
print("我是子類")
ss = b() # 例項化b
ss.hello() # 呼叫了父親的類
可以看到,在定義b類的時候,括號裡面加了個a,這樣就寫成了乙個繼承類,b是a的兒子,b繼承了a的一切。b可以隨時呼叫它的父親a裡面的函式。這就是繼承的語法,需要注意的是,所有的類都是object的子類。
單繼承和多繼承:
單繼承:每個類只能繼承乙個類
多繼承:每個類允許繼承多個類
class fish(): #定義乙個魚類,會游泳
def __init__(self,name):
self.name = name
def swim(self):
print(self.name)
print("我會游泳")
class bird(): # 定義了乙個鳥類,會飛
def __init__(self, name):
self.name = name
def fly(self):
print(self.name)
print("我會飛")
class person(): # 定義了乙個人類,會工作
def __init__(self, name):
self.name = name
def work(self):
print(self.name)
print("我會工作")
class superman(person, bird, fish): # 超人,要會工作,會游泳,會飛
def __init__(self, name):
self.name = name
s = superman("我是超人")
s.fly()
s.work()
s.swim()
print(superman.mro) # 檢視所有繼承關係的方法
print(superman.__base__) # 檢視繼承的父類 print(superman.__bases__) # 檢視繼承的全部父類 (, , )
這裡定義了乙個超人,那麼既然是超人,那就要會飛,會游泳,會做人類做的事,所以很形象的解發布了乙個關於多繼承的例子
只要繼承了乙個父親類,那麼我們可以隨時呼叫父親裡面的函式,子類繼承是有順序的,它會按照順序來檢視。關於多繼承,我們不推崇這種寫法,隱患很多,一旦出了bug,那麼很難找出來。
類裡面還有一種寫法,叫組合:
class milk():
def __init__(self, x):
self.num = x
class porridge():
def __init__(self, x):
self.num = x
class breakfast():
def __init__(self, x, y):
self.milk = milk(x)
self.porridge = porridge(y)
def name(self):
print("我今天早餐喝了{}杯牛奶,{}碗粥".format(self.milk.num, self.porridge.num))
ss = breakfast(2,3)
# print(ss) # <__main__.breakfast object at 0x000000000240ada0> 直接print例項物件得到物件位址
ss.name()
#我今天早餐喝了2杯牛奶,3碗粥
這就是組合,直接把需要的類放進去例項化就可以了。
如果想擴充套件父類的建構函式,那麼就有這個寫法:
class b():
def __init__(self, name):
print("b")
print(name)
class c(b):
def __init__(self, name):
b.__init__(self, name) # 首先呼叫父類的建構函式
print("這是c中附加的功能") # 其次再增加自己的功能
c = c("我是c")
# b# 我是c
# 這是c中附加的功能
--------------------------------super().f()
str__,repr,:芭蕾的實力變成字串
__str:字串,對使用者友好,適合print輸出
__repr:str備胎,如果有str,print會先執行str,eval(repr(object)) = object
call:正常情況下例項不能像函式一樣被呼叫,要想的話可以用call
class:檢視類名
python class 繼承和多繼承
繼承和多繼承 子類在繼承的時候,在定義類的時候,填寫的是父類的名字 父類的屬性和方法,子類都可以繼承並使用 父類 子類 基類 派生類 class chickensoup object 繼承的子類引數是object,多繼承的子類引數是父類的名字 definit self self.name 爺爺傳承下...
單繼承和多繼承
物件導向的三大特性 封裝,繼承,多型.什麼是繼承?專業角度 b 繼承 a類,b就叫做a的子類,派生類,a叫做b的父類,基類,超類.b類以及b類的物件使用a類的所有的屬性以及方法.字面意思 繼承就是繼承父母所有的資產.單繼承,多繼承.繼承的優點.節省 增強的耦合性.規範化.單繼承.子類以及物件可以呼叫...
繼承 多繼承
一 繼承 1 封裝 self引數傳入的是建立的物件,self可以直接將物件帶引數傳入類中方法,這種在物件中封裝資料,對類進行了優化的方法就叫封裝。2 當乙個繼承自另乙個累的時候,會先去子類裡面找,如果有先呼叫沒有去夫類找。1 class rectangle 矩形類 def init self,len...