类之间的关系
类之间的关系
依赖关系
class Dog:
def __init__(self,name,age,breed,master):
self.name=name
self.age=age
self.breed=breed
self.master=master #传进来是个对象
self.sayhi()
def sayhi(self):
print('my name is %s,my bread is %s,my master is %s'%(self.name,self.breed,self.master.name))
class Person:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
def walk_dog(self,dog_obj):
print("主人%s带%s出去溜溜弯。。。"%(self.name,dog_obj.name))
p1=Person('刘一骏',23,'男')
d1=Dog('哈士奇',12,'京巴',p1)
print(d1.breed)
p1.walk_dog(d1)
结果
my name is 哈士奇,my bread is 京巴,my master is 刘一骏
京巴
主人刘一骏带哈士奇出去溜溜弯。。。
关联关系(用一个新类来关联)
class RelationShip:
"""保存couple之间的对象关系"""
def __init__(self):
self.couple=[]
def make_couple(self,obj1,obj2):
self.couple=[obj1,obj2]
print("%s和%s确定了夫妻关系。。。"%(obj1.name,obj2.name))
def get_my_parter(self,obj):
# print('找%s的对象'%(obj.name))
for i in self.couple:
if i!=obj:
return i.name
else:
print("\n你没有对象")
def break_up(self):
print("%s和%s离婚了。。。。"%(self.couple[0].name,self.couple[1].name))
self.couple.clear()
class Person:
def __init__(self,name,age,sex,relation):
self.name=name
self.age=age
self.sex=sex
self.parter=None
self.relation=relation #在每个人实例里存储关系对象
relation_obj=RelationShip()
p1=Person('刘一骏',32,'M',relation_obj)
p2=Person('陈倩君',30,'F',relation_obj)
relation_obj.make_couple(p1,p2)
print(relation_obj.get_my_parter(p1))#找p1刘一骏的对象
relation_obj.break_up()
结果
刘一骏和陈倩君确定了夫妻关系。。。
陈倩君
刘一骏和陈倩君离婚了。。。。
组合关系(一堆组件构成完整的实体)
class Person:#定义一个类
role='person'#人的角色属性是人
def __init__(self,name,sex):
self.name=name
# self.attack_val=attack_val
self.life_val=100#实例化的时候血量为100
self.sex=sex
self.weapon=Weapon()#直接实例化,生成一个人就生成武器
def attack(self,dog):
dog.life_val -=self.attack_val
print('%s打了狗%s,狗掉血%s,还剩余血量%s...'%(self.name,dog.name,self.attack_val,dog.life_val))
class Dog:
role='dog'#狗的公共属性是狗
def __init__(self,name,attack_val):
self.name=name
self.attack_val=attack_val#每一条狗都有自己的攻击力
self.life_val=100
def bite(self,person):
person.life_val -=self.attack_val
print("狗%s咬了人%s一口,人掉血%s,还剩血量%s"%(self.name,person.name,self.attack_val,person.life_val))
class Weapon:#要和对象组合在一起才有用
def dog_stick(self,obj):
"""打狗棒"""
self.name='打狗棒'
self.attack_val=40
obj.life_val -= self.attack_val
self.print_log(obj)
def knife(self,obj):
"""屠龙刀"""
self.name='屠龙刀'
self.attack_val=80
obj.life_val -= self.attack_val
self.print_log(obj)
def dog_stick(self,obj):
"""AK"""
self.name='AK47'
self.attack_val=40
obj.life_val -= self.attack_val
self.print_log(obj)
def print_log(self,obj):
print("%s被%s攻击了,掉血%s,还剩血量%s..."%(obj.name,self.name,self.attack_val,obj.life_val))
p1=Person('刘一骏',60)
d1=Dog('藏獒',60)
p1.weapon.dog_stick(d1)
p1.weapon.dog_stick(d1)
结果
藏獒被AK47攻击了,掉血40,还剩血量60...
藏獒被AK47攻击了,掉血40,还剩血量20...