https://www.cnblogs.com/liubing8/p/11308127.html

1. 类的空间问题

  • 添加对象属性

    # 在类的__init__可以添加,在类的方法也可以添加,在类的外部也可以添加
    
    class Human:
    mind = '有思想的'
    def __init__(self, name, age):
    self.name = name
    self.age = age
    def eat(self,argv):
    Human.body = argv
    print('吃饭') sun = Human('张三', 18)
    sun.eat()
    print(sun.__dict__)
    sun.weight = 130
    print(sun.__dict__)
  • 添加类的属性

    # 类的内部
    sun.eat('有头有脸') # 类的外部
    Human.body = '有头四肢'
    print(Human.__dict__)

2. 类与对象之间的关系

  • 查找顺序角度分析类与对象之间的关系

    对象空间与类空间有相同的名字, 对象. 肯定先从对象空间查找.
    
    查询顺序:
    对象.名字: 对象空间 ______类对象指针_______--> 类空间 ---> 父类空间
    类名.名字: 类空间 -----> 父类空间 1.每个对象都可以从类的空间去找,不可以去别的对象空间去找
    2.单向不可逆,类名不可以找到对象的属性
    3.__init__产生对象空间,不是空的,有一个对象指针

3. 类与类之间的关系

  • 依赖关系:将一个类的类名或者对象传入另一类的方法中

    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):
    print(f'{self.name} 默念三声: 3,2,1 关门')
    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('奇奇')
    haier = Refrigerator('海尔')
    qiqi.open(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('吃什么吃')
    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} 会做饭') ergou = Boy('二狗')
    qiao = Girl('乔', 58, '小钢炮')
    ergou.girlfriend = qiao
    ergou.have_a_diner()
    ergou.girl_skill()
  • 总结:依赖与组合让类与类产生关系,增强耦合性

python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系的更多相关文章

  1. python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super

    https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 ...

  2. python 面向对象专题(一):面向对象初识、面向对象结构、类、self、实例化对象

    https://www.cnblogs.com/liubing8/p/11301344.html 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象 ...

  3. python 面向对象十二 元类

    一.类也是对象 只要使用关键字class,Python解释器在执行的时候就会创建一个对象.下面的代码段: class ObjectCreator(object): pass 将在内存中创建一个对象,名 ...

  4. python 面向对象专题(六):元类type、反射、函数与类的区别、特殊的双下方法

    目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3. 函数与类的区别 4. 特殊的双下方法 1. 元类type type:获取对象 ...

  5. Python 面向对象进阶(二)

    1. 垃圾回收 小整数对象池 Python对小整数的定义是 [-5, 257),这些整数对象是提前建立好的; 在一个Python程序中,所有位于这个范围内的整数,使用的都是同一个对象; 单个字符共用对 ...

  6. python 面向对象专题(十):特殊方法 (三)__get__、__set__、__delete__ 描述符(三)方法是描述符

    在类中定义的函数属于绑定方法(bound method),因为用户定义的函数都有 __get__ 方法,所以依附到类上时,就相当于描述符.示例 20-13 演示了从 面向对象专题(九)示例 20-8 ...

  7. python 面向对象专题(三):继承

    目录 Python面向对象03 /继承 1. 初识继承 2. 单继承 3. 多继承 4. 总结 1. 初识继承 概念:专业角度:如果B类继承A类,B类就称为子类,派生类,A类就称为父类,超类,基类 种 ...

  8. python 面向对象专题(八):特殊方法 (一)__get__、__set__、__delete__ 描述符(一)

    https://www.cnblogs.com/flashBoxer/p/9771797.html 实现了 __get__.__set__ 或 __delete__ 方法的类是描述符.描述符的用法是, ...

  9. python 面向对象专题(七):异常处理

    目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 2.try 6. 常见异常种类 1. ...

随机推荐

  1. (一)JavaMail发送简单邮件

    1,导入依赖 <dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail ...

  2. java中Proxy类初探

    在java中提供了一个动态代理类,这个类位于java.lang.reflect包中的Proxy类中.什么是动态代理类呢?就是可以在运行时创建一个实现了一组给定接口的新类.听上去有点高深的样子,其实是提 ...

  3. 【JMeter_11】JMeter逻辑控制器__Switch控制器<Switch Controller>

    Switch控制器<Switch Controller> 业务逻辑: 取得switch value的值,通过对节点下所有取样器.逻辑控制器的下标.名称匹配去执行,switch value的 ...

  4. Linux性能优化思路

    性能测试的核心,就是找出性能瓶颈并进行性能优化,解决"慢"的问题,最终满足客户业务需求. [性能需求来源及性能问题现象] 性能需求的来源,主要分为以下几类: 项目组提出性能需求: ...

  5. Cannot instantiate the type Map

    今天在使用Map中犯了个低级错误,记录一下: 打算使用map为一个视频List观看记录的统计标识,key为vid,value默认为false,当该key已经统计,标识value为true,初始实例化M ...

  6. 一分钟开始持续集成之旅系列之:C 语言 + Makefile

    作者:CODING - 朱增辉 前言 make 工具非常强大,配合 makefile 文件可以实现软件的自动化构建,但是执行 make 命令依然需要经历手动输入执行.等待编译完成.将目标文件转移到合适 ...

  7. c++教程网经典的c语音学习视频教程

  8. 动态自动配置Bean

    概览 接口Condition 用于基于条件的自动配置,和注解@Conditional配合使用,可实现JavaBean的动态自动配置 自定义实现动态配置Bean 定义一个接口和两个实现类 定义两个Con ...

  9. linux中神奇的命令alias

    在linux中大家应该都知道,有些命令和参数特别繁琐,而且还是大量输入这些命令,这个时候我们就可以使用linux中的alias命令来给这些繁琐的命令起别名,但是,alias 命令只对当前终端有效,当终 ...

  10. 洛谷 P3063 【[USACO12DEC]Milk Routing S】

    这道题可以暴力哒~ 我们枚举每一个出现过的容量,然后跑一次最短路,求延迟,在跑最短路的时候,如果遇到的某一个点,比我们当前枚举的那个点小,那么就直接不走这一个点,然后枚举完后,就能得到最大值了. 代码 ...