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. 小球(总结sort和cmp函数、结构体排序)

    问题 N: 小球(点击) 时间限制: 1 Sec  内存限制: 128 MB                                                               ...

  2. Python爬虫小白入门(一)入门介绍

    一.前言 你是不是在为想收集数据而不知道如何收集而着急? 你是不是在为想学习爬虫而找不到一个专门为小白写的教程而烦恼? Bingo! 你没有看错,这就是专门面向小白学习爬虫而写的!我会采用实例的方式, ...

  3. 深入理解JVM(③)低延迟的Shenandoah收集器

    前言 Shenandoah作为第一款不由Oracle(包括一起的Sun)公司的虚拟机团队所领导开发的HotSpot垃圾收集器.是只存在于OpenJDK当中的,最初由RedHat公司创建的,在2014年 ...

  4. Laravel模板引擎Blade中section的一些标签的区别介绍

    Laravel 框架中的 Blade 模板引擎,很好用,但是在官方文档中有关 Blade 的介绍并不详细,有些东西没有写出来,而有些则是没有说清楚.比如,使用中可能会遇到这样的问题: 1.@yield ...

  5. mybatis读写分离

    mybatis读写分离实现方式有很多种,当然如果没有太过复杂的处理,可以使用阿里云数据库自带的读写分离连接,那样会更加简洁.本文主要对mybatis实现读写分离.主要的实现方式有一下四种: 方案1 通 ...

  6. 微信小程序-返回并更新上一页面的数据

    小程序开发过程中经常有这种需求,需要把当前页面数据传递给上一个页面,但是wx.navigateBack()无法传递数据. 一般的办法是把当前页面数据放入本地缓存,上一个页面再从缓存中取出. 除此之外还 ...

  7. 一条SQL删除重复记录,重复的只保留一条

    情景: 我们的数据库中可能会存在很多因各种原因而重复的记录,我们需要对这些重复的记录进行删除,每组组重复的记录只保留一条就行 例如我们有这么个表:两个框框都是有重复记录的,红框和绿框都只需要留下一条, ...

  8. 入门大数据---Sqoop简介与安装

    一.Sqoop 简介 Sqoop 是一个常用的数据迁移工具,主要用于在不同存储系统之间实现数据的导入与导出: 导入数据:从 MySQL,Oracle 等关系型数据库中导入数据到 HDFS.Hive.H ...

  9. Laravel 如何在blade文件中使用Vue组件

    Laravel 如何在blade文件中使用Vue组件 1. 安装laravel/ui依赖包 composer require laravel/ui 2.生成vue基本脚手架 php artisan u ...

  10. 简单案例:form表单应用向后端发数据

    效果如下图: 先新建一Django项目. 最后在terminal执行python manage.py runserver 8090 运行djago程序 浏览器输入http://127.0.0.1:80 ...