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. LR脚本信息函数-lr_start_timer和lr_end_timer

    为了计算时间更加精确,可以用这个函数去掉LR自身的检查点所浪费的时间.如text check and image time Action() { double time_elapsed, durati ...

  2. 通信中的错误代码 (repost from https://blog.csdn.net/zzhuan_1/article/details/80066716)

    • 100 - 继续.• 101 - 切换协议.• 110 重新启动标记答复.• 120 服务已就绪,在 nnn 分钟后开始.• 125 数据连接已打开,正在开始传输.• 150 文件状态正常,准备打 ...

  3. Linux下配置tomcat

    我们可以在用户目录下新建一个tomcat目录 mkdir tomcat ls cd tomcat/ 使用wget命令下载tomcat的压缩包 wget https://downloads.apache ...

  4. rust 学习之旅一, rust编程环境相关

    Mac rust环境 rust安装: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh rust更新: rustup upd ...

  5. SpringBoot从入门到放弃之配置Spring-Data-JPA自动建表

    pom文件配置引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...

  6. WeChair项目Alpha冲刺(4/10)

    团队项目进行情况 1.昨日进展    Alpha冲刺第四天 昨日进展: 前端完成小程序登录态的定义 LoginController编写初步完成同时修改并更新了代码,但是在将编码好的项目部署到服务器上时 ...

  7. Newtonsoft 六个超简单又实用的特性,值得一试 【上篇】

    一:讲故事 看完官方文档,阅读了一些 Newtonsoft 源码,对它有了新的认识,先总结 六个超经典又实用的特性,同大家一起分享,废话不多说,快来一起看看吧~~~ 二:特性分析 1. 代码格式化 如 ...

  8. 手把手教你使用Python生成图灵智能小伙伴,实现工作助手/闲聊功能

    /1 前言/ 在家闲着,做个小项目,基于Python,实现一个语聊小机器人,分享给大家.项目整体比较简单,官方文档介绍的非常详细,可快速上手. /2 目标/ 将图灵机器人放到桌面,实现工作助手/陪聊功 ...

  9. Java多线程之volatile详解

    本文目录 从多线程交替打印A和B开始 Java 内存模型中的可见性.原子性和有序性 Volatile原理 volatile的特性 volatile happens-before规则 volatile ...

  10. .Net Core 中GC的工作原理

    前言 .NET 中GC管理你服务的内存分配和释放,GC是运行公共语言运行时(CLR Common Language Runtime)中,GC可以帮助开发人员有效的分配内存和和释放内存,大多数情况下是不 ...