对象间的组合关系说白了就是,一个类的实例作为另一个类的属性。
出现这种关系的原因是(假设类A的实例作为了类B的属性(也别管是类属性还是成员属性了,反正是属于类或者属于实例B的这么一个属性 ) ):类B太复杂了,如果所有的内容全都写在类B中,太乱了。
比如接下来人狗大战的例子,如果雾气不单独拎出来做一个类的话,那么人的类的类属性终究会多了很多属于不同武器的属性,比如刀的名字,攻击值;棍子的名字,棍子的攻击值等等,就会很乱,现在把这些武器归结在一个武器类中,看起来就好很多
而且,这些武器如果在复杂一些,也可以单开一个类的,比如刀类,棍子类啥的
但是由于以下的例子简单,就直接把刀和棍子一起写在武器类里面了,,,,
然后注意一下:
①类A是实体作为类B的属性,所以,用的时候得将类A实例化啊
②其次就是,Python中函数内是可以定义变量的,可以当做简单类的属性去用一用(如果类不复杂,想这个例子中的枪支和棍子类)
代码如下:
#同一个类,不同实例之间 的 交互关系
class Weapon:
def knife(self,obj_people,obj_dog):
obj_dog.health_point -= 30
print(obj_,"拿刀打狗",obj_,"使得狗掉了30的血,现在狗的血量为:",obj_dog.health_point)
def stick(self,obj_people,obj_dog):
obj_dog.health_point -= 20
print(obj_,"拿棍子打狗",obj_,"使得狗掉了30的血,现在狗的血量为:",obj_dog.health_point)
class Dog:
def __init__(self,dname):
= dname
self.health_point = 100
def Info(self):
print(,"此时有血量为:",self.health_point)
class People:
def __init__(self,pname,page):
= pname
self.age = page
self.health_point = 100
self.weapon = Weapon()
p1 = People('zch',23)
d1 = Dog('京巴')
p1.weapon.knife(p1,d1)
p1.weapon.stick(p1,d1)
d1.Info()