主要用到"對象關(guān)聯(lián)“操作糠雨,何為對象關(guān)聯(lián)翼岁,請看下面代碼:
“教室里有學生”
# 本例演示對象關(guān)聯(lián)
# 首先定義一個學生類
class Student(object):
def __init__(self, name):
self.name = name
# 然后定義一個教室類
class ClassRoom(object):
def __init__(self, num):
self.num = num
self.stus = []
# 關(guān)聯(lián)方式,直接給ClassRoom定義一個屬性民效,存儲學生對象的引用区岗,即實例名
def add_stu(self, stu):
self.stus.append(stu)
if __name__ == "__main__":
s = Student("小張")
c = ClassRoom("三年一班")
# 將s添加到c的stus屬性中
c.add_stu(s)
# 調(diào)用教室對象的學生屬性,獲取學生的姓名
print(c.stus[0].name)
基于此眠菇,寫了一個稍微復雜點的示例:
“勞拉”開槍打死了“visa"
'''
定義人边败、槍、子彈捎废、彈夾等類
創(chuàng)建兩個玩家, 一個持槍射擊10次把對方打死
'''
# 定義人笑窜,屬性:姓名,血量登疗,持有的槍
class Player(object):
def __init__(self, name, hp):
self.name = name
self.hp = hp
self.gun = None # 需要通過equip_gun()方法配槍
def fire(self, enemy):
'''
開槍射擊另一個玩家使其掉血, 同時自己手中的槍中的彈夾中的子彈減少最上面的一個(最上面的一個是最后壓入的, 故用pop()方法)\n
param: enemy: 對方玩家對象引用
'''
bullet_temp = self.gun.clip.bullets.pop()
bullet_temp.hit_player(enemy)
def equip_gun(self, gun):
'''
裝槍方法
'''
self.gun = gun
def equip_clip(self, clip):
'''
裝彈夾方法
'''
self.gun.clip = clip
def equip_bullet(self, bullet):
'''
裝彈方法
'''
self.gun.clip.bullets.append(bullet)
# 定義槍排截,屬性:槍型號,彈夾(默認沒有彈夾辐益,需要安裝)
class Gun(object):
def __init__(self, name):
self.name = name
self.clip = None
# 定義子彈断傲,屬性:殺傷力
class Bullet(object):
def __init__(self, power:int):
self.power = power
# 子彈殺傷敵人的方法
def hit_player(self, player):
if player.hp <= self.power:
player.hp = 0
print("%s已被擊斃" % player.name)
else:
player.hp -= self.power
# 定義彈夾,屬性:彈夾容量
class Clip(object):
def __init__(self, volume:int):
self.volume = volume
self.bullets = [] # 用來存儲所有子彈對象的引用
# 控制方法智政,完成打敵人整個流程
def main():
# 建立玩家和敵人玩家
player_a = Player("勞拉", 100)
player_b = Player("visa", 100)
# 建立槍支和彈夾认罩、子彈
ak_47 = Gun("ak47")
clip_10 = Clip(10) # 該彈夾容量為10
bullet_1 = Bullet(11) # 該子彈殺傷力為11
bullet_2 = Bullet(9) # 該子彈殺傷力為9
bullets = [bullet_1, bullet_2]
# 給玩家配槍、配彈夾续捂、彈夾裝10發(fā)子彈垦垂,前5發(fā)是bullet_1, 后五發(fā)是bullet_2
player_a.equip_gun(ak_47)
player_a.equip_clip(clip_10)
for i in range(0,2):
bullet_temp = bullets[i]
for j in range(0,5):
player_a.equip_bullet(bullet_temp)
print("{}準備就緒, 持槍{}, 子彈{}發(fā),可以射擊".format(player_a.name, player_a.gun.name, len(player_a.gun.clip.bullets)))
i = 0
while len(player_a.gun.clip.bullets):
i += 1
print("射擊敵人第{0}次, 射擊前敵人hp為{1}".format(i, player_b.hp))
player_a.fire(player_b)
if i < 10:
print("射擊后敵人hp為{0}".format(player_b.hp))
if __name__ == "__main__":
main()