Python之面向对象类的空间问题及类之间的关系
Posted zhangdadayou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之面向对象类的空间问题及类之间的关系相关的知识,希望对你有一定的参考价值。
6.3 类的空间问题及类之间的关系
类空间的问题
何处可以添加对象属性
class A: def __init__(self,name): self.name = name def func(self,sex): self.sex = sex obj = 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__里面添加,还可以在类的其他方法或者类的外面添加
何处可以添加类的静态属性
class A: def __init__(self,name): self.name = name def func(self,sex): self.sex = sex def func1(self): A.bbb = 'ccc' A.aaa = "alex" # 类的外部添加 print(A.__dict__) A.func1(111) # 类的内部添加 print(A.__dict__)
- 总结:类的属性不仅可以在类内部添加,还可以在类的外部添加
对象如何找到类的属性
- 对象之所以可以找到类,是因为对象空间有类对象指针
- 对象查找属性的顺序:先从对象空间找 ------> 类空间找 ------> 父类空间找 ------->.....
- 类名查找属性的顺序:先从本类空间找 -------> 父类空间找--------> ........
上面的顺序都是单向不可逆,类名不可能找到对象的属性。
类之间的关系
- 类之间存在以下几种关系:依赖关系、关联关系、组合关系、聚合关系、实现关系、继承关系
依赖关系
依赖关系:将一个类的对象或者类名传到另一个类的方法使用。此时, 我们说, ?象和冰箱之间就是依赖关系. 我?着你. 但是你不属于我.
class Elephant: def __init__(self,name): self.name = name def 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 = name def 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 = name self.girlfriend = girlfriend def 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 = name self.girlfriend = girlfriend def 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 = name self.age = age self.body = body def 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 = name self.ad = ad self.hp = hp def attack(self,p1): p1.hp = p1.hp - self.ad print(f"self.name攻击p1.name,p1.name掉了self.ad,还剩p1.hp血") print(f"p1.name的血量为p1.hp") def equipment_wea(self,wea): self.weapon = wea class Weapon: def __init__(self,name,ad): self.name =name self.ad = ad def weapon_attack(self,p1,p2): print(f"self:self") p2.hp =p2.hp -self.ad print(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) # 组合:给一个对象封装一个属性,该属性是另一个类的对象
- 组合:将一个类的对象封装到另一个类的对象的属性中,就叫组合
以上是关于Python之面向对象类的空间问题及类之间的关系的主要内容,如果未能解决你的问题,请参考以下文章
python 面向对象专题:类的空间问题类与对象之间的关系类与类之间的关系