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. .net core 部署到windows服务上的方法

    前言 Net core 项目部门在Windows有很多种方式,大致有以下几种, dotnet 命令, iis(windowshosts), 一些开源的应用容器(docker ) 基于一些exe 程序, ...

  2. 【JMeter_20】JMeter逻辑控制器__事务控制器<Transaction Controller>

    事务控制器<Transaction Controller> 业务逻辑: 这个控制器在在业务控制上并没有什么特殊逻辑,可以理解为在简单控制器的基础上添加了统计的功能,当所有子节点全部成功则成 ...

  3. Python数据处理常用工具(pandas)

    目录 数据清洗的常用工具--Pandas 数据清洗的常用工具 Pandas常用数据结构series和方法 Pandas常用数据结构dataframe和方法 常用方法 数据清洗的常用工具--Pandas ...

  4. 多语言工作者の十日冲刺<5/10>

    这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺--第五天(05.04) 作业正文 ...

  5. 在采用K8S之前您必须了解的5件事情

    作者简介 Christopher Tozzi,自2008年来以自由职业者的身份对Linux.虚拟化.容器.数据存储及其相关主题进行报道. 时至今日,Kubernetes已然成为风靡一时的容器编排调度工 ...

  6. 入门大数据---Hbase_Java_API

    一.简述 截至到目前 (2019.04),HBase 有两个主要的版本,分别是 1.x 和 2.x ,两个版本的 Java API 有所不同,1.x 中某些方法在 2.x 中被标识为 @depreca ...

  7. JavaScript基础正则表达式的字面声明(012)

    不出所料,正则表达式也是JavaScript的一种对象.构造正则表达式也有两种,一种是使用JavaScript内置的 new RegExp() 构造函数,另一种是我们推荐的字面声明方式: // reg ...

  8. 线性表的顺序存储和链式存储c语言实现

    一.线性表的顺序存储 typedef int ElemType;typedef struct List { ElemType *data;//动态分配 ,需要申请空间 int length; }Lis ...

  9. 题解 P1144 【最短路计数】

    这道题用一次SPFA就可以过了.在求最短路的同时,对答案进行统计即可. 实现: \(dis_i\)表示从1到\(i\)的最短路(实在还是不懂的话看程序吧). 当\(dis_i>dis_j+1\) ...

  10. 飞越面试官(三)--JVM

    大家好!我是本公众号唯一官方指定没头屑的小便--怕屁林.   JVM,全称Java Virtual Machine,作为执行Java程序的容器,几乎代理了Java内存与服务器内存的交互,可以说是程序拥 ...