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


    7.2.1 类空间问题

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

    何处可以添加类的静态属性? -- 类的属性不仅可以在类内部添加,还可以在类的外部添加.

    对象如何找到类的属性. 图解

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

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

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

    7.2.2 依赖关系

    # 举例说明  依赖关系:将一个类的对象或者类名传到另一个类的方法使用。
    class Elephant:
        def __init__(self, name):
            self.name = name
    
        def open(self,ref1):
            print(f'大象{self.name}默念:打开冰箱门')
            ref1.open_door()
    
        def close(self,ref2):
            print(f'大象{self.name}默念:关闭冰箱门')
            ref2.close_door()
    
    class Refrigerator:
    
        def __init__(self,name):
            self.name = name
    
        def open_door(self):
            print(f"{self.name}冰箱⻔被打开了")
    
        def close_door(self):
            print(f"{self.name}冰箱⻔被关上了")
    
    el = Elephant('小白')
    ref = Refrigerator('AUX')
    el.open(ref)
    el.close(ref)
    
    # 执行 Elephant 类方法 实现两个过程 (1.打开冰箱门 2.冰箱门被打开了)
    

    7.2.3 组合关系

    # 组合关系: 将一个类的对象封装成另一个类的对象的属性.
    # 示例1    男⼈关联着女朋友. 女⼈关联着男朋友. 这种关系可以是互相的, 也可以是单⽅⾯的.
    class Boy:
        def __init__(self,name):
            self.name = name
    
        def meet(self,girl_friend=None):
            self.girl_friend = girl_friend     # self.girl_friend = Girl的对象空间
    
        def have_dinner(self):
            if self.girl_friend:
                print(f'{self.name}请{self.girl_friend.name}一起吃饭')
                self.girl_friend.shopping(self)  # self = Boy 对象空间
            else:
                print('吃狗粮吧')
    
    class Girl:
        def __init__(self,name,age):
            self.name = name
            self.age = age
        def shopping(self,boy):  # boy = Boy 的对象空间
            print(f'{self.name}和{boy.name}一起去购物')
    
    wu = Boy('吴超')
    G = Girl('如花',48)
    wu.meet(G)       # 执行Boy类中的meet方法,将类Girl作为参数传给 girl_friend
    wu.have_dinner()
    
    
    # 示例2  设计一个游戏人物类,让实例化几个对象让这几个游戏人物实现互殴的效果。
    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}血')
    
        def equit_weapon(self,wea):
            self.weapon = wea      # self.weapon = Weapon 对象空间  这里实现组合关系
    
    class Weapon:
        def __init__(self,name,ad):
            self.name = name
            self.ad = ad
    
        def weapon_attack(self,p1,p2):  # p1 = gailun  p2 = zhaoxin
            p2.hp -= self.ad
            print(f'{p1.name}利用{self.name}给了{p2.name}一下,{p2.name}还剩{p2.hp}血')
    
    gailun = GameRole('盖伦', 10, 100)
    zhaoxin = GameRole('赵信', 20, 90)
    great_sword = Weapon('大保健', 30)
    gailun.equit_weapon(great_sword)   # 依赖关系: 将Weapon作为参数传给GameRole中的equit_weapon方法的wea
    gailun.weapon.weapon_attack(gailun, zhaoxin)
    
  • 相关阅读:
    [bzoj5483][Usaco2018 Dec]Balance Beam_凸包_概率期望
    [bzoj3829][Poi2014]FarmCraft_树形dp
    [bzoj3420]Poi2013 Triumphal arch_树形dp_二分
    [bzoj4240]有趣的家庭菜园_树状数组
    [CF9D]How Many Trees?_动态规划_树形dp_ntt
    拖拽排序
    windows-build-tools
    阿里云七牛云oss获取视频内的帧图片
    转义符输入的转换
    node脚本下载geo数据
  • 原文地址:https://www.cnblogs.com/Agoni-7/p/11152999.html
Copyright © 2020-2023  润新知