python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系
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 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系的更多相关文章
- python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super
https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 ...
- python 面向对象专题(一):面向对象初识、面向对象结构、类、self、实例化对象
https://www.cnblogs.com/liubing8/p/11301344.html 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象 ...
- python 面向对象十二 元类
一.类也是对象 只要使用关键字class,Python解释器在执行的时候就会创建一个对象.下面的代码段: class ObjectCreator(object): pass 将在内存中创建一个对象,名 ...
- python 面向对象专题(六):元类type、反射、函数与类的区别、特殊的双下方法
目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3. 函数与类的区别 4. 特殊的双下方法 1. 元类type type:获取对象 ...
- Python 面向对象进阶(二)
1. 垃圾回收 小整数对象池 Python对小整数的定义是 [-5, 257),这些整数对象是提前建立好的; 在一个Python程序中,所有位于这个范围内的整数,使用的都是同一个对象; 单个字符共用对 ...
- python 面向对象专题(十):特殊方法 (三)__get__、__set__、__delete__ 描述符(三)方法是描述符
在类中定义的函数属于绑定方法(bound method),因为用户定义的函数都有 __get__ 方法,所以依附到类上时,就相当于描述符.示例 20-13 演示了从 面向对象专题(九)示例 20-8 ...
- python 面向对象专题(三):继承
目录 Python面向对象03 /继承 1. 初识继承 2. 单继承 3. 多继承 4. 总结 1. 初识继承 概念:专业角度:如果B类继承A类,B类就称为子类,派生类,A类就称为父类,超类,基类 种 ...
- python 面向对象专题(八):特殊方法 (一)__get__、__set__、__delete__ 描述符(一)
https://www.cnblogs.com/flashBoxer/p/9771797.html 实现了 __get__.__set__ 或 __delete__ 方法的类是描述符.描述符的用法是, ...
- python 面向对象专题(七):异常处理
目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 2.try 6. 常见异常种类 1. ...
随机推荐
- SpringBoot 启动配置原理
几个重要的事件回调机制 ApplicationContextInitializer SpringApplicationRunListener ApplicationRunner CommandLine ...
- Redis - (Linux)安装与配置
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 与其他 key - value 缓存产品有以下三个特点: 1:Redis支持数据的持久化,可以将内存 ...
- gerapy 爬虫web调度可视化工具(基于scrapyd)
web 基于scrapyd 提供主机管理功能 基于scrapyd管理已安装服务的主机. 进入具体主机管理页面,会自动加载所有已知爬虫任务: 可直接可以调度.运行.查看日志. 提供项目管理功能 将已知项 ...
- Linux Pam后门总结拓展
首发先知社区: https://xz.aliyun.com/t/7902 前言 渐渐发现pam后门在实战中存在种植繁琐.隐蔽性不强等缺点,这里记录下学习pam后门相关知识和pam后门的拓展改进. 0x ...
- java soket通信总结 bio nio aio的区别和总结
1 同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 自己上街买衣服,自己亲自干这件事,别的事干不了. 2 异步 异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作 ...
- Struts2 执行流程 以及 Action与Servlet比较 (个人理解)
上图提供了struts2的执行流程.如下: 1:从客户端发出请求(HTTPServletRequest). 2:请求经过各种过滤器(filter),注:一般情况下,如SiteMesh等其他过滤器要放在 ...
- React实战教程之从零开始手把手教你使用 React 最新特性Hooks API 打造一款计算机知识测验App
项目演示地址 项目演示地址 项目代码结构 前言 React 框架的优雅不言而喻,组件化的编程思想使得React框架开发的项目代码简洁,易懂,但早期 React 类组件的写法略显繁琐.React Hoo ...
- 【秒懂Java】【第1章_初识Java】02_软件开发
通过上一篇文章<01_编程语言>,我们了解到 Java是众多编程语言中的其中一种 编程语言可以用来开发软件 因此,我们即将要学习的Java技术,是属于软件开发的范畴.那软件开发的前景如何呢 ...
- JavaScript基础使用parseInt()转换整数(005)
parseInt()可以把一个字符串格式的整数解析一个整数数值,如"32 days"将被解析为32.这个函数还接受第二个参数,指定整数的进制(当然,一般来说应该是十进制).一个好的 ...
- 浅谈MySQL数据库
目录 什么是数据库 定义 发展现状 数据库基本概念 数据库分类 关系数据库 非关系型数据库(NoSQL) 数据库启动与连接 启动服务端 连接数据库 用户信息查看 数据库的基本操作 表的基本操作 记录的 ...