13 繼承和多繼承,魔術方法

2021-09-24 22:56:05 字數 2572 閱讀 8357

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...