面向對象,類名稱空間,查找順序,組合
阿新 • • 發佈:2018-07-24
lang ole style lan 全部 -s 這一 進行 英雄
# 程序從上往下一次把類的靜態變量和方法全部加載進一個內存空間,直到遇到類名加括,實例化對象的時候會新開辟一個內存空間,
# (會有一個類對象指針)在對象裏面沒找到目標會根據指針,去類裏面找
# 查詢順序:
# 對象.屬性:先從對象空間找,如果找不到,再從類空間找,再找不到再從父類找
# 類名.屬性:先從本類空間找,如果找不到,再從父類找
類名稱空間:在定義類的時候會開辟一個空間,這個空間裏面裝著所有的類
class Person: animal=‘高級動物‘ soul=‘有靈魂‘ language=‘語言‘ def __init__(self,name,age,sex): self.name= name self.age = age self.sex = sex def eat(self): print(‘%s,在吃飯‘ % (p1.name)) p1=Person(‘張三‘,18,‘男‘) print(p1.language) #先從對象空間找,沒有找到在去類空間找
組合:
# 組合:給一個類的對象封裝一個屬性,這個屬性是另一個類的對象
# 3,模擬英雄聯盟寫一個遊戲人物的類(簡單的封裝).
# 要求:
# (1)創建一個 Game_role的類.
# (2) 構造方法中給對象封裝name,ad(攻擊力),hp(血量).三個屬性.
# (3) 創建一個attack方法,此方法是實例化兩個對象,互相攻擊的功能:
# 例: 實例化一個對象 蓋倫,ad為10, hp為100
# 實例化另個一個對象 劍豪 ad為20, hp為80
# 蓋倫通過attack方法攻擊劍豪,此方法要完成 ‘誰攻擊誰,誰掉了多少血, 還剩多少血‘的提示功能.
class Game_role:
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))
p1=Game_role(‘蓋倫‘,10,100)
p2=Game_role(‘劍豪‘,20,80)
p1.attack(p2)
(升級)
class Game_role: def __init__(self,name,ad,hp): self.name = name self.ad = ad self.hp = hp def men_weapon(self,we): #定義一個封裝武器的方法(接收參數,把武器封裝給對象) self.we=we #we接收的就是a1,(相當於賦值,此時we就是封裝好的武器) class Weapon: def __init__(self,name,ad): self.name = name self.ad = ad def fight(self,p1,p2): p2.hp=p2.hp-self.ad print(‘%s攻擊%s,%s掉了%s血,還剩%s血‘ % (p1.name,p2.name,p2.name,self.ad,p2.hp)) p1=Game_role(‘蓋倫‘,20,100) p2=Game_role(‘劍豪‘,50,80) a1=Weapon(‘大刀‘,60) a2=Weapon(‘小刀‘,30) p1.men_weapon(a1) #組合,在這一步調用封裝武器的方法,把武器傳給函數進行封裝 p1.we.fight(p1,p2) #這裏解釋出來就是發起攻擊,p1對象使用, we裝備好的給p1的武器, fight攻擊方法(函數方法) , (p1,p2)是p1攻擊p2
面向對象,類名稱空間,查找順序,組合