對象間的組合關系說白了就是,一個類的實例作為另一個類的屬性。
出現這種關系的原因是(假設類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_people.name,"拿刀打狗",obj_dog.name,"使得狗掉了30的血,現在狗的血量為:",obj_dog.health_point)
def stick(self,obj_people,obj_dog):
obj_dog.health_point -= 20
print(obj_people.name,"拿棍子打狗",obj_dog.name,"使得狗掉了30的血,現在狗的血量為:",obj_dog.health_point)
class Dog:
def __init__(self,dname):
self.name = dname
self.health_point = 100
def Info(self):
print(self.name,"此時有血量為:",self.health_point)
class People:
def __init__(self,pname,page):
self.name = 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()