Python之面向对象类的空间问题及类之间的关系

Posted zhangdadayou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之面向对象类的空间问题及类之间的关系相关的知识,希望对你有一定的参考价值。

6.3 类的空间问题及类之间的关系

  1. 类空间的问题

    • 何处可以添加对象属性

    • 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__里面添加,还可以在类的其他方法或者类的外面添加

  2. 何处可以添加类的静态属性

    • 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__)
    • 总结:类的属性不仅可以在类内部添加,还可以在类的外部添加
  3. 对象如何找到类的属性

    • 技术图片

    • 对象之所以可以找到类,是因为对象空间有类对象指针
    • 对象查找属性的顺序:先从对象空间找 ------> 类空间找 ------> 父类空间找 ------->.....
    • 类名查找属性的顺序:先从本类空间找 -------> 父类空间找--------> ........
    • 上面的顺序都是单向不可逆,类名不可能找到对象的属性。

  4. 类之间的关系

    • 类之间存在以下几种关系:依赖关系、关联关系、组合关系、聚合关系、实现关系、继承关系
  5. 依赖关系

    • 依赖关系:将一个类的对象或者类名传到另一个类的方法使用。此时, 我们说, ?象和冰箱之间就是依赖关系. 我?着你. 但是你不属于我.

    • 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)
  6. 组合关系(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之面向对象类的空间问题及类之间的关系的主要内容,如果未能解决你的问题,请参考以下文章

17.Python面向对象之:类空间问题以及类之间的关系

python 面向对象专题:类的空间问题类与对象之间的关系类与类之间的关系

python 面向对象专题:类的空间问题类与对象之间的关系类与类之间的关系

Python -- 面向对象:类空间问题以及类之间的关系

面向对象中类和类的关系

UnityUnity C#开发设计面向对象原则及类与类的关系