# coding=utf-8
# # 胖子老闆的父類
class
fatfather
(object):
def__init__
(self, name,
*args,
**kwargs)
:print()
("*************** 開始呼叫 fatfather ********************===="
('fatfather的init開始被呼叫'
) self.name = name
('呼叫fatfather類的name是%s'
% self.name)
('fatfather的init呼叫結束'
)print()
("*************** 結束呼叫 fatfather ********************===="
)# 胖子老闆類 繼承 fatfather 類
class
fatboss
(fatfather)
:def
__init__
(self, name, hobby,
*args,
**kwargs)
:print()
("*************** 開始呼叫 fatboss ********************===="
('胖子老闆的類被呼叫啦!'
)# super().__init__(name)
## 因為多繼承傳遞的引數不一致,所以使用不定引數
super()
.__init__(name,
*args,
**kwargs)
("%s 的愛好是 %s"
%(name, hobby)
)print()
("*************** 結束呼叫 fatboss ********************===="
)# 胖子老闆的老婆類 繼承 fatfather類
class
fatbosswife
(fatfather)
:def
__init__
(self, name, housework,
*args,
**kwargs)
:print()
("*************** 開始呼叫 fatbosswife ********************===="
('胖子老闆的老婆類被呼叫啦!要學會幹家務'
)# super().__init__(name)
## 因為多繼承傳遞的引數不一致,所以使用不定引數
super()
.__init__(name,
*args,
**kwargs)
("%s 需要幹的家務是 %s"
%(name, housework)
)print()
("*************** 結束呼叫 fatbosswife ********************===="
)# 胖子老闆的女兒類 繼承 fatboss fatbosswife類
class
fatbossgril
(fatboss, fatbosswife)
:def
__init__
(self, name, hobby, housework)
('胖子老闆的女兒類被呼叫啦!要學會幹家務,還要會幫胖子老闆鬥地主'
)super()
.__init__(name, hobby, housework)
defmain()
("列印fatbossgril類的mro"
(fatbossgril.__mro__)
# 這個就是執行順序
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
(self.name,self.age,
"car"
)def
say(self)
("hello car"
)class
truck
:def
__init__
(self,name,color,
*args,
**kwargs)
: self.name = name
self.age = color
(self.name,self.age,
"truck"
)def
say(self)
("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)
(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...