类与类之间的关系
1、依赖关系(主从之分):将一个类的类名或者对象传入另一个类的方法中
class Elephant:
def __init__(self, name):
self.name = name
def open(self, obj):
print(f"{self.name}默念三声:3 2 1 开门!")
obj.be_open()
def close(self):
print(f"{self.name}默念三声:3 2 1 关门!")
class Refrigerator:
def __init__(self, name):
self.name = name
def be_open(self):
print(f"{self.name}冰箱被打开了")
def be_close(self):
print(f"{self.name}冰箱被关闭了")
# 将一个类的类名或者对象传入另一个类的方法中
qiqi = Elephant("奇奇")
haier = Refrigerator("海尔")
qiqi.open(haier)
2、组合关系:将一个类的对象封装到另一个类的对象属性中
class Boy:
def __init__(self, name, girlfriend=None):
self.name = name
self.girlfriend = girlfriend
def have_a_diner(self):
if self.girlfriend:
print(f"{self.name}请他的女朋友{self.girlfriend}一起烛光晚餐")
else:
print("自己吃!")
yulin = Boy("yulin")
yulin.have_a_diner()
# 只是给对象封装了一个属性girlfriend为一个字符串的数据
yulin = Boy("yulin")
yulin.girlfriend = "50"
yulin.have_a_diner()
将一个类的对象封装到另一个类的对象属性中
class Boy:
def __init__(self, name, girlfriend=None):
self.name = name
self.girlfriend = girlfriend
def have_a_diner(self):
if self.girlfriend:
print(f"{self.name}请他的{self.girlfriend.age}岁的,身材很{self.girlfriend.body}的女朋友{self.girlfriend.name}一起烛光晚餐")
else:
print("自己吃!")
def girl_skill(self):
print(f"{self.name}的女朋友的技能是:")
self.girlfriend.skill()
class Girl:
def __init__(self, name, age, body):
self.name = name
self.age = age
self.body = body
def skill(self):
print(f"{self.name}会唱歌")
yulin = Boy("yulin")
cola = Girl("Cola", 23, "正")
yulin.girlfriend = cola
yulin.have_a_diner()
yulin.girl_skill()
class GameRole:
def __init__(self, name, ad, hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self, p1):
p1.hp = p1.hp - self.ad
print(f"{self.name}攻击了{p1.name},{p1.name}掉了{self.ad}血,还剩{p1.hp}血")
class Weapon:
def __init__(self, name, ad):
self.name = name
self.ad = ad
def weapon_attack(self, p1, p2): # 依赖关系
p2.hp = p2.hp - self.ad
print(f"{p1.name}利用{self.name}给了{p2.name}一下,{p2.name}掉了{self.ad}血,还剩{p2.hp}血")
gailun = GameRole("盖伦", 10, 00)
xin = GameRole("信", 20, 80)
Sword = Weapon("大宝剑", 15)
Musket = Weapon("长缨枪", 30)
# 盖伦利用大宝剑给赵信一下
Sword.weapon_attack(gailun, xin)
1、功能虽然实现了,但是逻辑上不合理,应该是人物对象调用方法,主体
2、游戏人物本身就应该绑定武器属性
class GameRole:
def __init__(self, name, ad, hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self, p1):
p1.hp = p1.hp - self.ad
print(f"{self.name}攻击了{p1.name},{p1.name}掉了{self.ad}血,还剩{p1.hp}血")
def equipment_wea(self, wea):
self.weapon = wea # 组合关系
class Weapon:
def __init__(self, name, ad):
self.name = name
self.ad = ad
def weapon_attack(self, p1, p2): # 依赖关系
p2.hp = p2.hp - self.ad
print(f"{p1.name}利用{self.name}给了{p2.name}一下,{p2.name}掉了{self.ad}血,还剩{p2.hp}血")
gailun = GameRole("盖伦", 10, 00)
xin = GameRole("信", 20, 80)
Sword = Weapon("大宝剑", 15)
Musket = Weapon("长缨枪", 30)
# 给游戏人物封装武器属性
gailun.equipment_wea(Sword)
gailun.weapon.weapon_attack(gailun, xin)

浙公网安备 33010602011771号