• 类的空间问题 类与类之间的关系


    1.类的空间问题

    1.1何处可以添加对象属性

    class A:
        def __init__(self,name):
            self.name = name
    
        def func(self,sex):
            self.sex = sex
    
    # 类外面可以:
    obj = A("barry")
    obj.age = 18
    print(obj.__dict__)
    # ("name": "barry", "age": 18)
    
    # 类内部也可以
    obj = A("barry")
    obj.func("男")
    # __init__方法可以
    # func 方法也可以
    

    总结:

    对象的属性不仅可以在__init__里面添加,还可以在类的其他方法或者类的外面添加

    1.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 = 'taibai'
    print(A.__dict__)
    
    # 类的内部也可以添加。
    
    A.func1(111)
    print(A.__dict__)
    

    总结:

    类的属性不仅可以在类内部添加, 还可以在类的外部添加

    1.3对象如何找到类的属性

    总结:

    对象查找属性的顺序:先从对象空间找 ------> 类空间找 ------> 父类空间找 ------->.....

    类名查找属性的顺序:先从本类空间找 -------> 父类空间找--------> ........

    上面的顺序都是单向不可逆,类名不可能找到对象的属性。

    2.类与类之间的关系

    2.1依赖关系

    将一个类的类名或者对象传入另一个类的方法中

    class Elephant:
    
        def __init__(self, name):
            self.name = name
    
        def open(self, obj):
            print(f"{self.name}开门")
            obj.be_open()
    
        def close(self):
            print(f"{self.name}关门")
    
    
    class Refrigerator:
    
        def __init__(self, name):
            self.name = name
    
        def be_open(self):
            print(f"{self.name}被打开")
    
        def be_close(self):
            print(f"{self.name}被关闭")
    
    
    daxiang = Elephant("大象")
    bingxiang = Refrigerator("冰箱")
    daxiang.open(bingxiang)
    

    2.2组合关系

    给一个类的对象封装一个属性,此属性为另一个类的
    对象

    class Boy:
    
        def __init__(self, name,girlfriend=None):
            self.name = name
            self.girlfriend = girlfriend
    
        def have_a_diner(self):
            if self.girlfriend:
                print(f'{self.name}请他的女朋友{self.girlfriend}一起烛光晚餐')
            else:
                print('单身狗,吃什么吃')
    liye = Boy('李业')
    # 只是给李业封装了一个属性:girlfriend 为一个字符串的数据
    liye.girlfriend = '乔碧萝'
    liye.have_a_diner()
    
    class Boy:
    
        def __init__(self, name,girlfriend=None):
            self.name = name
            self.girlfriend = girlfriend
    
        def have_a_diner(self):
            if self.girlfriend:
                print(f'{self.name}请他的{self.girlfriend.age}岁的,{self.girlfriend.body}的女朋友{self.girlfriend.name}一起烛光晚餐')
            else:
                print('单身狗,吃什么吃')
    
        def girl_skill(self):
            print(f'{self.name}的女朋友的技能:')
            self.girlfriend.skill()
    
    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封装了另一个类中的对象
    liye.girlfriend = qiao
    liye.have_a_diner()
    # liye.girl_skill()
    

    组合与依赖的例子

    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}, 谁掉了{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):
            p2.hp = p2.hp - self.ad
            print(f"{p1.name}利用{self.name}给了{p2.name}一下子,{p2.name}掉了{self.ad}血,还剩{p2.hp}血")
    
    
    gailun = GameRole("盖伦", 10, 100)
    xin = GameRole("赵信", 20, 80)
    sword = Weapon("大宝剑", 15)
    musket = Weapon("长缨枪", 30)
    
    gailun.equipment_wea(sword)
    gailun.weapon.weapon_attack(gailun, xin)
    
  • 相关阅读:
    ExquisiteWnd
    GDIPlusEncapsulation
    COleDateTimeSpan
    Create Win32 Window
    vagrant 安装配置,PhpStorm10 设置远程调试
    PHPExcel导出主要代码记录
    常用js方法集合,动态加载js方法--判断变量是否为空--截取小数点后几位--截取带中文的字条串
    最近遇到的各种坑
    控制台运行bee run project 报[ERRO] Fail to watch directory[too many open files]
    Mac 安装beego And bee工具
  • 原文地址:https://www.cnblogs.com/beichen123/p/11312003.html
Copyright © 2020-2023  润新知