Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系
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/类的空间问题、类与对象之间的关系、类与类之间的关系的更多相关文章
- python 面向对象、特殊方法与多范式、对象的属性及与其他语言的差异
1.python 面向对象 文章内容摘自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532018.html 1.__init__() 创建对 ...
- Python—面向对象02
1.抽象类与归一化 接口,即提供给使用者来调用自己功能的方式.方法.入口 为什么要使用接口? 接口提取了一类共同的函数,可以把接口看做一个函数的集合 然后让子类去实现接口中的函数 这么做的意义在于 ...
- python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系
https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...
- python 面向对象进阶之元类metaclass
一:知识储备 exec exec:三个参数 参数一:字符串形式的命令 参数二:全局作用域(字典形式),如果不指定,默认为globals() 参数三:局部作用域(字典形式),如果不指定,默认为local ...
- Python——面向对象、绑定对象、组合
1. 面向过程VS面向对象 (1)面向过程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复杂 ...
- python面向对象总结
一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什么是面向对象的程序设计及为什么要有它 面向过 ...
- python面向对象学习笔记(一)
粘贴一些自学过程中的笔记大纲,源文本在pycharm里面写的,有点乱整理一下,部分内容有待补充,书写不一定100%正确,全当数据备份了. 1.面向对象的特性 #你写代码时什么使用面向对象 #处理比较复 ...
- python 面向对象 公有属性
公有属性定义 公有属性也叫作类变量 静态字段 class role(): # 传参数 # 公有属性都在这里定义 # 在类里直接定义的属性即是公有属性 nationality = 'JP' def ...
- python 面向对象(其他相关)
python 面向对象(其他相关): (思维导图 ↑↑↑↑↑↑) 一.issubclass(obj,cls) 检查obj是否是类cls的对象 class Base(object): pass c ...
随机推荐
- 在VisualStudio中为GUI程序添加console
1.使用WINDOWS提供的一系列ReadConsole,WriteConsole等API来完成这个功能,具体参见MSDN HANDLE hOut = GetStdHandle(STD_OUTPUT_ ...
- group by <grouping sets(...) ><cube(...)>
GROUP BY GROUPING SETS() 后面将还会写学习 with cube, with rollup,以及将它们转换为标准的GROUP BY的子句GROUP SET(), CU ...
- Shell总结01-shell解释器
常见Shell解释器种类 就像不同地区有不同方言一样,不同的Linux/Unix系统使用着不同类型的shell,其中sh是UNIX上的最基本的shell,遵循POSIX接口规范 操作系统 默认shel ...
- Arduino+sim800C家居安防火灾报警 拨打电话 发送短信例程程序
家居安防报警器,参考程序. 火灾报警 涉及用sim800c发短信,拨打电话通知. 接线: Sim800c 3.3V -> Arduino 3.3V Sim800c GND -> Ardui ...
- control+Z的逆 control+Y
接触过电脑的朋友一定知道control键加Z可以在大多时候撤销我们前一步的操作,相当于计算机系统里最“广谱”的后悔药. 然而,你有没有在编辑文本的时候却因为撤销的操作而后悔?输入文本之后撤销,发现少了 ...
- 利用python打印杨辉三角
用python打印杨辉三角 介绍 杨辉三角,是初高中时候的一个数列,其核心思想就是说生成一个数列,该数列中的每一个元素,都是之前一个数列中,同样位置的元素和前一个元素的和. 正好在python中,也就 ...
- 手把手教你基于SqlSugar4编写一个可视化代码生成器(生成实体,以SqlServer为例,文末附源码)
在开发过程中免不了创建实体类,字段少的表可以手动编写,但是字段多还用手动创建的话不免有些浪费时间,假如一张表有100多个字段,手写有些不现实. 这时我们会借助一些工具,如:动软代码生成器.各种ORM框 ...
- 从Spring Initializr开始
出识springcloud我们这里需要建立两个项目 来感受下微服务 一.配置服务 1. Spring Initializr. 用idea自带的 Spring Initializr. 建立第一个项目 2 ...
- c语言中的c语言中realloc()函数解析
c语言中realloc()函数解析 真是有点惭愧,这些内容本应该很早就掌握的,以前只是糊里糊涂的用,不知道在内存中具体是怎么回事,现在才弄清楚. realloc(void *__ptr, size_t ...
- 动力节点 mysql 郭鑫 34道经典的面试题三
1.第十五题 15.列出受雇日期早于其直接上级的所有员工编号.姓名.部门名称 思路一:第一步将emp a看成员工表,将emp b 看成领导表,员工表的mgr字段应该等于领导表的主键字段 mysql&g ...