python多繼承 super問題

2021-09-22 16:31:55 字數 4378 閱讀 6203

# coding=utf-8

# # 胖子老闆的父類

class

fatfather

(object):

def__init__

(self, name,

*args,

**kwargs)

:print()

print

("*************** 開始呼叫 fatfather ********************===="

)print

('fatfather的init開始被呼叫'

) self.name = name

print

('呼叫fatfather類的name是%s'

% self.name)

print

('fatfather的init呼叫結束'

)print()

print

("*************** 結束呼叫 fatfather ********************===="

)# 胖子老闆類 繼承 fatfather 類

class

fatboss

(fatfather)

:def

__init__

(self, name, hobby,

*args,

**kwargs)

:print()

print

("*************** 開始呼叫 fatboss ********************===="

)print

('胖子老闆的類被呼叫啦!'

)# super().__init__(name)

## 因為多繼承傳遞的引數不一致,所以使用不定引數

super()

.__init__(name,

*args,

**kwargs)

print

("%s 的愛好是 %s"

%(name, hobby)

)print()

print

("*************** 結束呼叫 fatboss ********************===="

)# 胖子老闆的老婆類 繼承 fatfather類

class

fatbosswife

(fatfather)

:def

__init__

(self, name, housework,

*args,

**kwargs)

:print()

print

("*************** 開始呼叫 fatbosswife ********************===="

)print

('胖子老闆的老婆類被呼叫啦!要學會幹家務'

)# super().__init__(name)

## 因為多繼承傳遞的引數不一致,所以使用不定引數

super()

.__init__(name,

*args,

**kwargs)

print

("%s 需要幹的家務是 %s"

%(name, housework)

)print()

print

("*************** 結束呼叫 fatbosswife ********************===="

)# 胖子老闆的女兒類 繼承 fatboss fatbosswife類

class

fatbossgril

(fatboss, fatbosswife)

:def

__init__

(self, name, hobby, housework)

:print

('胖子老闆的女兒類被呼叫啦!要學會幹家務,還要會幫胖子老闆鬥地主'

)super()

.__init__(name, hobby, housework)

defmain()

:print

("列印fatbossgril類的mro"

)print

(fatbossgril.__mro__)

# 這個就是執行順序

print()

print

("**********= 下面按照 mro 順序執行super方法 **********==="

) gril = fatbossgril(

"胖子老闆"

,"打鬥地主"

,"拖地"

)if __name__ ==

"__main__"

: main(

)"""

列印fatbossgril類的mro

(, , , , )

**********= 下面按照 mro 順序執行super方法 **********===

胖子老闆的女兒類被呼叫啦!要學會幹家務,還要會幫胖子老闆鬥地主

*************** 開始呼叫 fatboss ********************====

胖子老闆的類被呼叫啦!

*************** 開始呼叫 fatbosswife ********************====

胖子老闆的老婆類被呼叫啦!要學會幹家務

*************** 開始呼叫 fatfather ********************====

fatfather的init開始被呼叫

呼叫fatfather類的name是胖子老闆

fatfather的init呼叫結束

*************** 結束呼叫 fatfather ********************====

胖子老闆 需要幹的家務是 拖地

*************** 結束呼叫 fatbosswife ********************====

胖子老闆 的愛好是 打鬥地主

*************** 結束呼叫 fatboss ********************====

"""

class

car:

def__init__

(self,name,age,

**kwargs)

: self.name = name

self.age = age

print

(self.name,self.age,

"car"

)def

say(self)

:print

("hello car"

)class

truck

:def

__init__

(self,name,color,

*args,

**kwargs)

: self.name = name

self.age = color

print

(self.name,self.age,

"truck"

)def

say(self)

:print

("hello truck"

)class

df(truck,car)

:def

__init__

(self,name,color,age,

*args,

**kwargs)

: self.name = name

self.age = color

self.name = age

super()

.__init__(name,color,age)

print

(df.__mro__)

if __name__ ==

'__main__'

: df(

"dongfeng"

,"red",7

).say(

)"""

dongfeng red truck

(, , , )

hello truck

"""

動態屬性@property 、

__getattr__和__getattribute__ 、

__new__ 和 __init__、

屬性描述符

類變數、例項變數、類方法、例項方法、靜態方法。

鴨子型別和抽象基類

super與多繼承

1 super 1.1 super是乙個內建類,可以參考 builtin 中的 super 類 class super object def init self,type1,type2 none known special case of super.init super type,obj boun...

Python中多繼承與super 用法

python類分為兩種,一種叫經典類,一種叫新式類。兩種都支援多繼承。考慮一種情形,b繼承於a,c繼承於a和b,但c需要呼叫父類的init 函式時,前者會導致父類a的init 函式被呼叫2次,這是不希望看到的。而且子類要顯式地指定父類,不符合dry原則。經典類 class a def init se...

Python中的多繼承和super

簡單,定義四個類,a,b,c,d,其中d繼承自b和c,而b,c繼承自a,從第一步開始看 classa defrun self 第五步,列印如下print語句,此時self也是d類的例項物件 print f a哈哈 class b a def run self 第三步,首先列印print語句,此時se...