1 10 繼承 多繼承 魔法方法

2021-09-10 01:58:49 字數 2331 閱讀 5833

python3 建立的類,預設繼承 object父類/(頂級基類)超類

定義類的時候新增(object),相容性較好

1.繼承

定義:描述類與類的關係,(派生和類是同乙個意思)

calss 類名(父類名1,2...) # 繼承類
class a:

def play(self):

print('hello a')

class b:

def play(self):

print('hello b')

​class c(a): # c類 繼承 a類(c是a的子類,a是c的父類)

pass

c_c = c()

c_c.play()   # hello a

2.多繼承

重寫

class a:

def play(self):

print('hello a')

class b:

def play(self):

print('hello b')

​class c(a,b): # c類 繼承 a b 兩類 ——多繼承

# 按括號中繼承順序執行

def play(self):

print('hellp c')

​c_c = c()

c_c.play() # hello a ## 優先呼叫本身的方法

重寫後還想使用父類中的功能

class c(a):

def play(self):

a.play(self)       # 呼叫

supper().play()     # 呼叫 ## 找最近的上級父類

print('hello c')

直接父類 —— base__

每個類中 「bases" 特殊屬性(返回tuple)

bases:檢視類的直接父類

class a():

def play(self):

print('hello world !')

class b(a):

pass

class c(b): # c 繼承 a b 兩類 ——多繼承

pass

​c_c = c()

print(c.__bases__)     # 檢視 c類的直接繼承的父類

​輸出結果:

​(,) # c 的直接父類是 b類

supper 函式可以呼叫父類的方法,父類也可以使用supper函式

類在生成時會自動生成方法解析順序

類繼承順序 —— mro

可以通過 類名 「 .mro() 」或者類名「 .mro」 檢視

print(c.mro())   # 檢視類的繼承關係,返回列表

輸出結果:

​[, , , ]

​print(c.__mro__) # 檢視類的繼承關係,返回元組

​輸出結果:

​(, , , )

分類越細,越複雜

3.魔法方法

__add__(self, other)    # 進行加法運算的時候自用呼叫

# self 返回例項a ,

​class a:

def __add__(self, other): # 加法運算,引數規範

print(self)     # self 返回例項a

print(other)

​a = a()

a + 2   # 傳值到self # 哪個例項在+號左邊,則呼叫哪個引數

# a 需寫在**左邊,否則會報錯

b = 類名(引數)

c = 類名(引數)

[ str repr(字串型別,必須要有返回值) call ]

有什麼區別,又什麼關鍵點,長什麼樣子

弄清楚在什麼時候需要呼叫魔法方法!!!

class a:

def __add__(self, other): # 加法運算 引數規範

print(self)

print(other)

​a = a()

a + 2   # 2 # 傳值到self # 哪個例項在+號左邊,則呼叫哪 個引數 # a 需寫在**左邊,否則會報錯

print('a', a)

正常情況下,例項是不能像函式一樣被呼叫的,要想例項能夠被呼叫,就需要定義call方法.有call才能呼叫例項

類中的一些查詢相關資訊的方法

python學習筆記7 繼承與魔法方法

繼承 乙個類繼承另乙個類,就可以使用另乙個類裡的方法 egclass father1 def hello self print hello class father object object father son def init self,name 父類的屬性高於兩個子類 self.name n...

Python魔法方法 基本的魔法方法

new cls 1.new 是在乙個物件例項化時候所呼叫的第乙個方法 2.他的第乙個引數是這個類,其他的引數是用來直接傳遞給 init 方法 3.new 決定是否使用該 init 方法,因為.new 可以直接呼叫其他類的構造方法,或者返回別的例項物件來作為本類的例項,如果 new 沒有返回例項物件,...

繼承 多繼承

一 繼承 1 封裝 self引數傳入的是建立的物件,self可以直接將物件帶引數傳入類中方法,這種在物件中封裝資料,對類進行了優化的方法就叫封裝。2 當乙個繼承自另乙個累的時候,會先去子類裡面找,如果有先呼叫沒有去夫類找。1 class rectangle 矩形類 def init self,len...