class Dog:
role="dog"
def __init__(self,name,breed,lifeval,attackval,master) -> None:
self.name=name
self.breed=breed
self.lifeval=lifeval
self.attackval=attackval
self.master=master # 传入一个对象
self.wangwang() # 在实例化时调用自己的方法
def wangwang(self): # 对象之间的依赖关系
print(f"wangwang!My name is {self.name},my breed is {self.breed},my master is {self.master.name}!")
def bite(self,person_obj):
person_obj.lifeval -= self.attackval
print(f"{self.name}咬了{person_obj.name}一下,人{person_obj.name}掉血{self.attackval},还有血量{person_obj.lifeval}...")
class Weapon: # 对象之间的组合关系:由一堆组件构成一个完整的实体,组件本身独立,但又不能自己运行,必须跟宿主组合在一起运行
def dog_stick(self,obj):
"""打狗棒"""
self.name="打狗棒"
self.attack_val=40
obj.lifeval-=self.attack_val
self.print_log(obj)
def knife(self,obj):
"""屠龙刀"""
self.name="屠龙刀"
self.attack_val=80
obj.lifeval-=self.attack_val
self.print_log(obj)
def gun(self,obj):
"""AK47"""
self.name="AK47"
self.attack_val=100
obj.lifeval-=self.attack_val
self.print_log(obj)
def print_log(self,obj):
print(f"{obj.name}被{self.name}攻击了,掉血{self.attack_val},还剩血量{obj.lifeval}")
class Person:
role="person"
def __init__(self,name,age,sex,lifeval,attackval,relation) -> None:
self.name=name
self.age=age
self.breed=sex
self.lifeval=lifeval
self.attackval=attackval
self.weapon=Weapon() # 在这里直接对Weapon进行实例化,说明,有一个人实例化,就会有一个weapon实例化,把Weapon()放在这,完成对象之间的组合
self.partner=None
self.relation=relation
def beat(self,dog_obj):
dog_obj.lifeval -= self.attackval
print(f"{self.name}打了{dog_obj.name}一下,狗{dog_obj.name}掉血{self.attackval},还有血量{dog_obj.lifeval}...")
def private_stuff(self):
pass
class RelationShip: # 对象间的关联关系
"""保存couple之间的对象关系"""
def __init__(self) -> None:
self.couple = []
def create_couple(self,obj1,obj2):
self.couple = [obj1,obj2] # 两个人就成了对象
print(f"{obj1.name}和{obj2.name}确定了男女关系")
def get_mypartner(self,obj): # p1 p2 都有可能调用这个方法
for p in obj.relation.couple: # obj.relation.couple中存储的是一个对象列表
if p is not obj:
print(f"{obj.name}的对象是{p.name}")
return p
else:
print(f"{obj.name}没有对象...")
return None
def break_up(self):
print(f"{self.couple[0].name}和{self.couple[1].name}分手了....")
self.couple.clear() # 分手
if __name__=="__main__":
relation=RelationShip()
p1=Person("小红",20,"女",200,15,relation)
p2=Person("小黄",18,"男",200,17,relation)
p3=Person("小蓝",18,"男",200,19,relation)
p4=Person("小绿",19,"女",200,14,relation)
p5=Person("小黑",22,"男",200,16,relation)
d1=Dog("小金","金毛",100,20,p1)
d2=Dog("小木","藏獒",100,30,p2)
d3=Dog("小水","京巴",100,24,p3)
d4=Dog("小火","黑贝",100,23,p4)
d5=Dog("小土","二哈",100,25,p5)
p1.beat(d1) # 简单的对象交互关系
d2.bite(p5)
# 双向绑定,双向关联
p1.partner = p2
p2.partner = p1
print(p1.partner.name)
relation.create_couple(p3,p4) # 让两人成为对象
print(p3.relation.couple)
p4.relation.get_mypartner(p4)
p4.relation.break_up()
p4.relation.get_mypartner(p4)
# 人用武器打狗
d3.bite(p1)
p1.weapon.gun(d3)