1. 程式人生 > >18.07.24(查詢順序,組合)

18.07.24(查詢順序,組合)

空間 attack 靜態變量 src 通過 clas fight .com pri

在執行類名()時產生一個含有類對象指針的空間

技術分享圖片

查詢順序:

(1).對象>屬性:先從對象空間找,如果找不到再從類空間找,再找不到再從父類找.

(2).類名>屬性:先從本類空間找,如果找不到再從父類空間找

對象和對象之間是互相獨立的

例:計算實例化的次數

class Preson:
count = 0
def __init__(self):
Preson.count = Preson.count + 1
obj1 = Preson()
obj2 = Preson()
obj3 = Preson()
print(Preson.count) ==>3

通過類名可以更改類中的靜態變量值,但是通過對象不能改變,只能引用類中的靜態變量

組合:給一個類的對象封裝一個屬性,這個屬性是另一個類的對象

例:

class GameRole:
def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,p):
p.hp = p.hp - self.ad
print("%s攻擊了%s,%s掉了%s血,還剩%s血" % (self.name,p.name,p.name,self.ad,p.hp))
def armament_weapon(self,wea):
self.wea = wea

class Weapon:
def __init__(self,name,ad):
self.name = name
self.ad = ad
def fight(self,p1,p2):
p2.hp = p2.hp - self.ad - p1.ad
print("%s用來%s打了%s,%s掉了%s血,還剩%s血" % (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))
p1 = GameRole("灰太狼",20,500)
p2 = GameRole("紅太狼",50,300)
w1 = Weapon("平底鍋",70)
p2.armament_weapon(w1)
p2.wea.fight(p2,p1)
結果:紅太狼用來平底鍋打了灰太狼,灰太狼掉了70血,還剩380血

技術分享圖片

18.07.24(查詢順序,組合)