程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python面向對象OOP編程(四)--對象間的組合關系

編輯:Python

對象間的組合關系說白了就是,一個類的實例作為另一個類的屬性。

出現這種關系的原因是(假設類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()


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved