類的空間問題及類之間的關系
類的空間問題
1.何處可以添加對象屬性
class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex = sexobj = A("alex")
obj.age = 18 # 通過__init__方法添加
print(obj.__dict__)
obj1 = A("wusir")
obj.func("男") # 通過func方法添加
print(obj1.__dict__)
# 結果:
{'name': 'alex', 'age': 18}
{'name': 'wusir'}
**總結:對象的屬性不僅可以在__init__里面添加,還可以在類的其他方法或者類的外面添加。**
2.何處可以添加類的靜態屬性
class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex = sexdef func1(self):A.bbb = 'ccc'A.aaa = "alex" # 類的外部添加
print(A.__dict__)
A.func1(111) # 類的內部添加
print(A.__dict__)
總結:類的屬性不僅可以在類內部添加,還可以在類的外部添加。
3.對象如何找到類的屬性
對象之所以可以找到類,是因為對象空間有類對象指針
對象查找屬性的順序:先從對象空間找 ------> 類空間找 ------> 父類空間找 ------->.....
類名查找屬性的順序:先從本類空間找 -------> 父類空間找--------> ........
上面的順序都是單向不可逆,類名不可能找到對象的屬性。
類之間的關系
類之間存在以下幾種關系:
? 1.依賴關系
? 2.關聯關系
? 3.組合關系
? 4.聚合關系
? 5.實現關系
? 6.繼承關系(類的三大特性)
依賴關系
依賴關系:將一個類的對象或者類名傳到另一個類的方法使用。此時, 我們說, ?象和冰箱之間就是依賴關系. 我?著你. 但是你不屬于我.
class Elephant:def __init__(self,name):self.name = namedef open(self,obj):print(f"{self.name}默念3,2,1,{obj.name}打開了")def close(self):print(f"{self.name}關上了{self.name}的門")class Bx:def __init__(self,name):self.name = namedef open(self,obj1):print(f"{self.name}的門被{obj1.name}打開了")def close(self,obj1):print(f"{self.name}的門被{obj1.name}關上了")obj1 = Elephant("qq")
obj = Bx("B")
obj1.open(obj)
組合關系(2,3,4)
class Boy:def __init__(self,name,girlfriend=None):self.name = nameself.girlfriend = girlfrienddef have_a_dinner(self):if self.girlfriend:print(f"{self.name}請他的女朋友{self.girlfriend}一起燭光晚餐")else:print('單身狗,吃什么吃')
liye = Boy("李業")
liye.have_a_dinner()liye = Boy("李業")
liye.girlfriend = "喬碧蘿" # 在對象外部給對象賦值
liye.have_a_dinner()
class Boy:def __init__(self,name,girlfriend = None):self.name = nameself.girlfriend = girlfrienddef have_a_dinner(self):if self.girlfriend:print(f"{self.name}請他的{self.girlfriend.age}歲的,{self.girlfriend.body}的女朋友{self.girlfriend.name}一起燭光晚餐")else:print("單身狗吃什么吃")class Girl:def __init__(self,name,age,body):self.name = nameself.age = ageself.body = bodydef skill(self):print(f'{self.name}會用蘿莉音直播')liye = Boy("李業")
qiao = Girl("喬碧蘿",58,"小光跑")
liye.girlfriend = qiao # 對象靜態屬性為qiao對象
liye.have_a_dinner()
class GameRole:def __init__(self,name,ad,hp):self.name = nameself.ad = adself.hp = hpdef attack(self,p1):p1.hp = p1.hp - self.adprint(f"{self.name}攻擊{p1.name},{p1.name}掉了{self.ad},還剩{p1.hp}血")print(f"{p1.name}的血量為{p1.hp}")def equipment_wea(self,wea):self.weapon = weaclass Weapon:def __init__(self,name,ad):self.name =nameself.ad = addef weapon_attack(self,p1,p2):print(f"self:{self}")p2.hp =p2.hp -self.adprint(f"{p1.name}利用{self.name}給了{p2.name}一下子,{p2.name}還剩{p2.hp}血")gl = GameRole('蓋倫',10,100)
zx = GameRole('菊花信',15,80)
sword = Weapon('寶劍',15)
Musket = Weapon('長纓槍',30)
gl.equipment_wea(sword) # 給人物裝備武器對象。
gl.weapon.weapon_attack(gl,zx) # 組合:給一個對象封裝一個屬性,該屬性是另一個類的對象
組合:將一個類的對象封裝到另一個類的對象的屬性中,就叫組合。