zoukankan      html  css  js  c++  java
  • Python之面向对象(二)类的空间问题及类之间的关系

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

    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对新浪微博用户标签进行分词并推荐相关用户
    企业微信公众平台建设指南
    微信5.0:可定制菜单栏、移动支付、公众账号付费订阅
    jquery 控件使用 讲解 连载
    网络那些事
    拒绝访问 无法删除文件的解决方法
    Ubuntu9.10下安装Maya8.5(Finish)
    Ubuntu 9.10 更新软件源列表
    [转载]PHP的Class分页
    PHP与Mysql的连接
  • 原文地址:https://www.cnblogs.com/zhangdadayou/p/11415339.html
Copyright © 2011-2022 走看看