?不使用繼承時編寫多個類
class
animal
:def
run(self)
:print
("奔跑"
)def
eat(self)
:print
("吃東西"
)class
duck
:def
run(self)
:print
("奔跑"
)def
eat(self)
:print
("吃東西"
)def
speak
(self)
:print
("嘎嘎嘎"
)class
pig:
defrun
(self)
:print
("奔跑"
)def
eat(self)
:print
("吃東西"
)def
speak
(self)
:print
("咕咕咕"
)class
person
:def
run(self)
:print
("奔跑"
)def
eat(self)
:print
("吃東西"
)def
speak
(self)
:print
("呵呵呵"
)
?使用繼承編寫多個類
class
animal
:def
run(self)
:print
("奔跑"
)def
eat(self)
:print
("吃東西"
)class
duck
(animal)
:def
speak
(self)
:print
("嘎嘎嘎"
)class
pig(animal)
:def
speak
(self)
:print
("咕咕咕"
)class
person
(animal)
:def
speak
(self)
:print
("呵呵呵"
)
?#可以明顯感覺到**量減少
class
animal
:def
run(self)
:print
("跑起來"
)class
work
:def
doing
(self)
:print
("敲**"
)class
person
(animal,work)
:# 可以繼承很多個類,用","隔開
defeat
(self)
:print
("吃東西"
)
print
(person.__bases__)
# (, ) 兩個
class
shawn
:def
am(self)
:print
("i am from shawn"
)class
pai:
defam
(self)
:print
("i am from pai"
)classda:
defam
(self)
:print
("i am from da"
)class
xing
(pai,shawn,da)
:# 繼承了三個父類,查詢順序:從左到右
pass
start = xing(
)start.am(
)# i am from pai (找到的是最左邊的)
ps: ctrl + 滑鼠右鍵 快速跳轉到屬性 / 方法位置, 有時並不準確
class
bar1
(object):
deffoo1
(self)
:print
("i am bar1_foo1"
)def
foo2
(self)
:print
("i am bar1_foo2"
) self.foo1(
)###
class
bar2
(bar1)
:def
foo1
(self)
:print
("i am bar2_foo1"
)obj = bar2(
)obj.foo2(
)'''輸出
i am bar1_foo2 (物件自己沒有到父類去找)
i am bar2_foo1 (執行到"self.foo1()"後又返回來從最開始找)
'''
?在"python3"中
class
default
:# 預設繼承"object"
pass
print
(default.__bases__)
# (,)
?在"python2"中
class
default
(object):
# 新式類
pass
class
animal
:# 經典類
pass
?"python2"中"print"語法
print default.__bases__ # (,)
print animal.__bases__ # ()
ps: 新式類與經典類的屬性查詢順序是不一樣的
"蟹堡王餐廳"
def__init__
(self,name,age,***)
: self.name = name
self.age = age
self.*** = ***
class
staff
(people)
:def
sell
(self)
(f"正在賣蟹堡"
)class
boss
(people)
:def
payoff
(self,obj,money)
(f"給發了元工資"
) obj.money = money
s1 = staff(
"海綿寶寶",20
,"male"
)b1 = boss(
"蟹老闆",18
,"male"
)s1.sell(
)# 海綿寶寶正在賣蟹堡
b1.payoff(s1,
300)
# 蟹老闆給海綿寶寶發了300元工資
(s1.money)
# 300
[類名]
.__name__ # 類的名字(字串)
[類名]
.__doc__ # 類的文件字串
[類名]
.__base__ # 類的第乙個父類(在講繼承時會講)
[類名]
.__bases__ # 類所有父類構成的元組(在講繼承時會講)
[類名]
.__dict__ # 類的字典屬性
[類名]
.__module__ # 類定義所在的模組
[類名]
.__class__ # 例項對應的類(僅新式類中)
類的派生
面說到python支援多繼承, 但新式類與經典類的屬性查詢順序是不一樣的
菱形繼承問題
類的繼承 多繼承
多繼承要注意很多地方,以下 只是最基本多繼承方式,下面會講到多繼承的基本格式和繼承方法 簡單說明 1 如果在子類中需要父類的構造方法就需要顯示的呼叫父類的構造方法,或者不重寫父類的構造方法。2 在呼叫基類的方法時,需要加上基類的類名字首,且需要帶上 self 引數變數。區別在於類中呼叫普通函式時並不...
python類例項屬性,例項方法, 繼承, 多繼承
coding utf 8 import requests class spider name 豬八戒 def init self,url 類初始化方法,例項化類最先呼叫,可直接通過類名呼叫 self.target url target 即為例項化屬性 例項化後的屬性可以被例項化物件訪問,也可以被例項...
介面類的多繼承
動物園 老虎 tiger 走路 游泳 天鵝 swan 走路 游泳 飛 老鷹 oldying 飛 走路 from abc import abstractmethod,abcmeta 介面的多繼承 介面類 class swim animal metaclass abcmeta 游泳 abstractme...