码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-08-26 22:52:48      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:是你   image   静态属性   skill   依赖关系   sel   组合   lse   ima   

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之面向对象(二)类的空间问题及类之间的关系

标签:是你   image   静态属性   skill   依赖关系   sel   组合   lse   ima   

原文地址:https://www.cnblogs.com/zhangdadayou/p/11415339.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!