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

2021-10-03 10:49:16 字數 3873 閱讀 5136

#繼承:乙個類繼承另乙個類,就可以使用另乙個類裡的方法

eg

class

father1

:def

hello

(self)

:print

('hello'

)class

father

(object):

#object->father->son

def__init__

(self,name)

:#父類的屬性高於兩個子類

self.name=name

defeat(self)

:print

('大吃一頓'

)class

son1

(father,father1)

:#繼承father類,可同時繼承多個父類

name=

'小黑'

class

son2

(father)

:#繼承中,訪問的順序逐層son->father->object

name=

'小白'

son1=son1(

'小白'

)son2=son2(

'小黑'

)print

(son1.name)

son1.eat(

)son1.hello(

)print

(father.__bases__)

#__bases__查詢其父類名

print

(son2.name)

son2.eat(

)

#如果繼承多個父類 父類中有同種方法 會優先繼承最左變得類

#繼承優先順序 由左到右

class

father

:def

__init__

(self,name)

: self.name=name

defeat(self)

:print

("大吃一頓"

)class

mother

:def

__init__

(self,age,***)

: self.age=age

self.***=***

defcook

(self)

:print

('炒菜好吃%s'

%self.age)

class

son(father,mother)

:pass

xiaohong=son(

'name'

)#此時引數不會傳入mother中

print

(xiaohong.name)

xiaohong.eat(

)xiaohong.age=

'age'

#可使用此方法向mother傳參

print

(xiaohong.age)

xiaohong.cook(

)

class

base

:def

play

(self)

:print

('this is base'

)class

a(base)

:def

play

(self)

:print

('this is a'

)super()

.play(

)#呼叫b,

class

b(base)

:def

play

(self)

:print

('this is b'

)class

son(a,b)

:def

play

(self)

:print

('this is son'

) base(

).play(

)#可用於呼叫父類

super()

.play(

)#super.方法()呼叫父類的方法 遵循mro規則

#mro 演算法解析順序 繼承的順序,

s=son(

)#例項化son,mro規則順序為:a->b-base->object

s.play(

)print

(son.__mro__)

#通過此語句可以檢視mro順序a()

.play(

)#在使用類裡方法的時候 有兩種形式

#1,例項化乙個物件 通過物件.方法()

#2,類名().方法() #類名() 例項化

#不想使用父類方法,可在子類中重寫進行覆蓋

#多繼承 mix-in(搭積木)設計模式–>由分到總

#運算子方法參考+,__add__這種

classa:

def__init__

(self,num1,num2)

: self.num1=num1

self.num2=num2

def__add__

(self,other)

:#由+號呼叫

sum1=self.num1+other.num2

sum2=self.num2+other.num1

return sum1,sum2

print

(sum1)

a=a(10,

100)

b=a(11,

111)

print

(a+b)

print(1

+2)

#str 和 repr (必須返回字串)

#print 直接列印物件時,會顯示object和位址

#如果定義了repr,print列印時會列印這個魔法方法裡的內容

#如果定義了str就會列印str裡的內容

#str和repr同時出現,只會列印str裡的內容

class

person

:def

play

(self)

:print

('this is play'

)def

__str__

(self)

:return

'this is str'

def__repr__

(self)

:return

'this is repr'

x=person(

)x.play(

)# %s 佔位符 %r也是佔位符

# %s 會呼叫str %r會呼叫repr

print

('%s'

%x)#列印時預設為str

print

('%r'

%x)#互動時預設為repr

# __str__返回的結果 可讀性強 方便閱讀者

# __repr__返回的結果更精確 方便開發者

# __call__方法

class

person

:#例項變數加上括號就可以呼叫__call__

def__call__

(self)

:print

('this is call'

)h=person(

)h.age=

19h(

)print

(h.__class__)

#查詢類名

print

(h.__dict__)

#以字典形式輸出例項屬性

python學習筆記 繼承與重寫

繼承 定義乙個類 animal 動物 這個類中需要兩個方法 run sleep class animal def run self print 動物會跑 def sleep self print 動物睡覺 直接從animal類中來繼承它的屬性和方法 繼承是物件導向三大特性之一 通過繼承我們可以使乙個...

python學習筆記 繼承

如果給定乙個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷成為迭代。在python中,迭代是通過for.in來完成的。使用for迴圈時,只要作用於乙個可迭代物件,for迴圈就可以正常執行。在python中,一邊迴圈一邊計算的機制,稱為生成器 generator ...

php筆記 7 繼承

父類person,子類student class person protected function show 關鍵字extents後跟繼承的父級類名 class student extends person 重寫父類的show方法,訪問許可權不能低於原來的,父類是protected,現在用publ...