• day22——从空间角度研究类、类与类之间的关系


    day22

    从空间角度研究类

    何处添加对象属性
    • 在类的______init______可以添加
    class Human:
        mind = "有思想的"
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def eat(self,argv):
            print("吃饭")
    sun = Human("孙宇", 18)
    print(sun.__dict__)
    
    • 在类的方法中也可以添加
    class Human:
        mind = "有思想的"
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def eat(self):
            self.habby = "女"
            print("吃饭")
    
    
    sun = Human("孙宇", 18)
    sun.eat()
    print(sun.__dict__)
    
    • 在类的外部也可以添加
    class Human:
        mind = "有思想的"
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def eat(self, argv):
            print("吃饭")
    
    
    sun = Human("孙宇", 18)
    sun.sex = "男"
    print(sun.__dict__)
    
    何处添加类的属性
    • 类的内部
    class Human:
        mind = "有思想的"
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def eat(self, argv):
            Human.body = argv
            print("吃饭")
    
    sun.eat("大脸")
    print(Human.__dict__)
    
    • 类的外部
    class Human:
        mind = "有思想的"
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def eat(self, argv):
            print("吃饭")
    
    Human.lunguage = "中文"
    print(Human.__dict__)
    
    对象空间与类空间的关系

    对象空间与类空间有相同的名字,对象肯定先从对象空间查找

    查找顺序:

    对象. 名字:对象空间 类对象指针 ---> 类空间 ---> 父类空间

    类名. 名字:类空间 ---> 父类空间

    class Human:
        mind = "有思想的"
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def eat(self, argv):
            print("吃饭")
            
    sun.mind = "无脑"
    print(sun.mind) # 无脑
    print(Human.mind) # 有思想的
    

    类与类之间的关系

    依赖关系:主从之分

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

    class Elephant:
        def __init__(self, name):
            self.name = name
    
        def open(self, obj):
            print(f"{self.name} 默念三声:3,2,1 开门")
            obj.be_open()
    
        def close(self, obj):
            print(f"{self.name} 默念三声“3,2,1 关门")
            obj.be_close()
    
    
    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} 冰箱 被关闭了")
    
    
    qiqi = Elephant("qiqi")
    haier = Refrigerator("haier")
    
    qiqi.open(haier)  # 主.方法(从)
    qiqi.close(haier)
    
    # qiqi 默念三声:3,2,1 开门
    # haier 冰箱 被打开了
    # qiqi 默念三声“3,2,1 关门
    # haier 冰箱 被关闭了
    
    关联关系

    与组合相似

    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("吃啥吃")
    
    class Girl:
        def __init__(self, name, age, body):
            self.name = name
            self.age = age
            self.body = body
    
        def skill(self,obj):
            print(f"{obj.name}的女朋友{self.name} 会用萝莉音直播")
    
    
    yec = Boy("叶尘")
    qiao = Girl("乔碧萝", 53, "小钢炮")
    yec.girlfriend = qiao
    yec.have_a_diner()
    yec.girlfriend.skill(yec)
    
    # qiao = Girl("乔碧萝", 53, "小钢炮")
    # yec = Boy("叶尘", qiao)
    # yec.have_a_diner()
    # yec.girlfriend.skill(yec)
    
    组合关系

    组合:将一个类的对象封装到另一个类的对象的属性中,就叫组合。

    class GameRole:
        def __init__(self, name, ad, hp):
            self.name = name
            self.ad = ad
            self.hp = hp
    
    
    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("盖伦", 15, 800)
    xin = GameRole("赵信", 20, 500)
    sword = Weapon("大宝剑", 20)
    # 盖伦利用大宝剑给赵信一下子
    sword.weapon_attack(gailun, xin)
    
    # 1、功能虽然实现了,但是逻辑上不合理,应该是人物对象调用方法.主体
    # 2、游戏人物本身就应该绑定武器属性
    
    class GameRole:
        def __init__(self, name, ad, hp):
            self.name = name
            self.ad = ad
            self.hp = hp
    
        def weapon_swe(self, obj):
            self.weapon = obj   # 组合关系
    
    
    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   # self永远默认接收本类实例化对象或者子类对象
            print(f"{p1.name}利用{self.name}给了{p2.name}一下子,{p2.name}掉了{self.ad}血,还剩{p2.hp}血")
    
            
    gailun = GameRole("盖伦", 15, 800)
    xin = GameRole("赵信", 20, 500)
    sword = Weapon("大宝剑", 20)
    # 给游戏人物封装武器属性
    gailun.weapon_swe(sword)
    gailun.weapon.weapon_attack(gailun, xin)
    
    
  • 相关阅读:
    Web防止button按钮点击多次
    缓存
    A标签跳转链接并修改样式
    省、市、区 三级联动
    ASP.NET的OnClientClick与OnClick事件
    ASP:CheckBox获取前台的checked的属性
    c#字符串大小写转换
    C# Base64编码
    自定义滚动条样式 -webkit-scrollbar
    代码 三角
  • 原文地址:https://www.cnblogs.com/NiceSnake/p/11305168.html
Copyright © 2020-2023  润新知