Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系

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面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系的更多相关文章

  1. python 面向对象、特殊方法与多范式、对象的属性及与其他语言的差异

    1.python 面向对象 文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html   1.__init__() 创建对 ...

  2. Python—面向对象02

    1.抽象类与归一化 ​ 接口,即提供给使用者来调用自己功能的方式.方法.入口 为什么要使用接口? 接口提取了一类共同的函数,可以把接口看做一个函数的集合 然后让子类去实现接口中的函数 这么做的意义在于 ...

  3. python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系

    https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...

  4. python 面向对象进阶之元类metaclass

    一:知识储备 exec exec:三个参数 参数一:字符串形式的命令 参数二:全局作用域(字典形式),如果不指定,默认为globals() 参数三:局部作用域(字典形式),如果不指定,默认为local ...

  5. Python——面向对象、绑定对象、组合

    1. 面向过程VS面向对象 (1)面向过程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复杂 ...

  6. python面向对象总结

    一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什么是面向对象的程序设计及为什么要有它 面向过 ...

  7. python面向对象学习笔记(一)

    粘贴一些自学过程中的笔记大纲,源文本在pycharm里面写的,有点乱整理一下,部分内容有待补充,书写不一定100%正确,全当数据备份了. 1.面向对象的特性 #你写代码时什么使用面向对象 #处理比较复 ...

  8. python 面向对象 公有属性

    公有属性定义  公有属性也叫作类变量  静态字段 class role(): # 传参数 # 公有属性都在这里定义 # 在类里直接定义的属性即是公有属性 nationality = 'JP' def ...

  9. python 面向对象(其他相关)

    python 面向对象(其他相关): (思维导图    ↑↑↑↑↑↑) 一.issubclass(obj,cls) 检查obj是否是类cls的对象 class Base(object): pass c ...

随机推荐

  1. [AHOI2017/HNOI2017]单旋

    题目   点这里看题目. 分析   最妙的地方在于,这道题其实是用一种数据结构模拟另一种数据结构!   我们需要维护深度和树的结构,以下对于每个操作进行分别讨论. 插入一个新节点   可以发现,这个新 ...

  2. opencv视频教程分享

    opencv视频教程分享-在线与网盘 https://pan.baidu.com/s/1oAcctlS 密码:i5rd 链接:https://pan.baidu.com/s/1kVJ3iSJ  密码: ...

  3. Fabric网络组织与主节点选举

    一.Fabric网络组织 Fabric网络组织按如下结构组成:Fabric网络-->Channel通道-->组织(成员)-->节点.即整个网络由数个通道组成,每个通道都由多个组织构成 ...

  4. Netty源码分析之自定义编解码器

    在日常的网络开发当中,协议解析都是必须的工作内容,Netty中虽然内置了基于长度.分隔符的编解码器,但在大部分场景中我们使用的都是自定义协议,所以Netty提供了  MessageToByteEnco ...

  5. gatewayworker 安装 pcntl 扩展

    安装其它扩展也是如此. 第一步,查看php版本: /phpstudy/server/php/bin/php -v 第二步,下载扩展文件: http://php.net/releases/  这里面寻找 ...

  6. Linux系统结构详解(转)

    Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统.部分层次结构如图1-1所 ...

  7. css样式学习笔记

    视频参见php中文网玉女心经视频教程 讲解的相当的清楚和明白 第1章     :css快速入门 1.1     什么是css 改变html框架的样式. 1.2     css的三种引入形式 第一种形式 ...

  8. java方法中开启一个线程

    很多业务场景下需要你在一个方法中去开启一个线程,去跑一些处理时间较长的代码,这样调用方就不必经过长时间的等待了.好了 话不多说  先上代码: package test; public class Th ...

  9. python之浅谈编程语言

    一.编程语言的分类 机器语言(低级语言) 可以直接和硬件交互,用0和1和计算机沟通 优点:执行效率高(因为可以直接和计算机沟通) 缺点:开发效率低(都是用0和1进行编码) 汇编语言 同样可以直接和硬件 ...

  10. 以api文档为中心--前后端分开发离新思维

    api文档编写好像很简单,其实不是.一个良好的api文档,需要就有以下内容:接口详细描述,接口参数详细描述,接口返回结果详细描述,容易理解的范例.这些内容其实是不少的,编写过程中还非常单调乏味.再加上 ...