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)

原文地址:https://www.cnblogs.com/Agoni-7/p/11152999.html

时间: 2024-08-30 09:13:47

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

02面向对象之:类空间问题及类之间的关系

一.类的空间问题 1.何处可以添加对象属性 class A: def __init__(self,name,age): self.name=name self.age=age def func(self,sex): self.sex = sex # 类的外面可以 obj =A('alex',12) obj.heght=122 print(obj.__dict__){'name': 'alex', 'age': 12, 'heght': 122} # 内部也可以 obj.func('nv') pr

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

6.3 类的空间问题及类之间的关系 类空间的问题 何处可以添加对象属性 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("男") # 通过f

Python面向对象(类之间的关系)(三)

类与类之间的关系 在我们的世界中事物和事物之间总会有一些联系. 在面向对象中. 类和类之间也可以产生相关的关系 1. 依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作. 此时的关系是最轻的. 随时可以更换另外一个东西来完成此操作 class Plant: def __init__(self,zhonglei,xue,gongjili): self.zhonglei = zhonglei self.xue = xue self.gongjili = gongjili def da(s

java中的面向对象和类之间的关系

1.面向对象 a.分析问题中需要用到哪些类以及对象 b.分析以上类中或对象中应该具有哪些属性及方法 c.分析类之间的关系 (合适的方法应该出现在合适的类中) 2.举例:模板-实物 a.白板笔 b.员工(年龄.姓名.性别.工作岗位) (显示姓名,年龄,修改姓名,修改年龄,变更工作岗位) (区分对象:一般通过方法是无法区分对象的,通过属性可以区分对象) 3.类与对象 a.类是具有共同特征的一类事物的一个抽象 b.对象是这个类具体的某一个实例 4.类(对象)之间的4种关系 a.依赖关系(Depende

python之路---18 类与类之间的关系

三十七.类与类之间的关系 一.依赖关系 执行某个动作的时候. 需要xxx来帮助你完成这个操作      随时可以更换另外一个东西来完成此操作 此时的关系是最轻的. 二.关联关系(组合关系,聚合关系) 1.一对一关系 2.一对多关系 三.继承关系       (这是最重的关系) self在访问?法的顺序: 永远先找??的. ??的找不到再找?类的 父类  ==    基类  ==  超类 子类 ==    派生类 我们写的类和对象都是可哈希的 如果加上   __hash__ = None    对

【47】java的类之间的关系:泛化、依赖、关联、实现、聚合、组合

java的类之间的关系:泛化.依赖.关联.实现.聚合.组合 泛化: ? 泛化关系(Generalization)也就是继承关系,也称为"is-a-kind-of"关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类.在UML中,泛 化关系用带空心三角形的直线来表示. ? 在代码实现时,使用面向对象的继承机制来实现泛化关系,如在Java语言中使用extends关键字.在C++/C#中使用冒号":"来实现. 泛化对应Java中继承关系,即子

oc学习之封装与类之间的关系

1. 面向对象的特征-封装? 封装: 现实生活中的封装: 将很多的小东西 塞在1个大口袋里面. 好处: a. 对外部屏蔽. b. 方便管理. 代码的封装: 函数/方法 就是1种封装的体现: 将一段代码塞在函数/方法中. 好处: 屏蔽了内部的实现. 便于管理. 类是一种更高级别的封装: 1个类中封装数据的状态和行为. 将数据的状态和行为封装在了1个类中. 类中有很多复杂的实现. 对于外部而言无需关心. 只需要知道这个类是干啥的? 怎么用? 把哪些复杂的东西. 方法,属性.封装成1个类的整体. 2.

uml描述类与类之间的关系

工作时培训的时候公司同事讲过UML,当时没怎么听,后在在看相关技术书籍的时候,发现用到还不少,于是恶补了些.UML体系庞杂,非十天半月可以掌握,但是作为简单的工具使用,去看清楚系统的内在逻辑还是可以速成的.(非设计系统),股票市场是一场拼图游戏,而UML也可以作为拼图工具去参与面向对象体系软件设计的! 废话不多说,进入正题. 先介绍几款画UML的工具,三大知名VISIO,RationalRose,PowerDesign不多说,个人喜欢用开源的,一是免费,二是通常体积较小,运行起来比较快.我用的是

关于基类和派生类之间的关系

作为面向对象的程序设计来说,继承是非常重要的一个特点,面向对象程序设计(Object-Oriented Programming, OOP)的核心思想是数据抽象.继承和动态绑定.其中使用数据抽象,我们可以将类的接口与实现分离:使用继承,可以定义相似的类型并对其相似关系建模:使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象.下面什么主要介绍的是继承中基类和派生类之间的关系. 在基类中有两种类型的成员是我们需要注意的,一种是基类希望派生类继承的:一种是基类希望派生类覆盖的