七、面向对象高级
面向对象高级
- 常用的内置函数:
- 属性访问函数:是内置函数(都是操作实例对象的属性)
hasattr: 判断该实例对象是否存在该属性,hasattr(实例对象,属性)
返回值bool

getattr:得到属性值,没有报错,getattr(实例对象,属性)

setattr:设置属性(增加,修改,有就修改,没有就增加),setattr(实例对象,属性,属性值)

delattr:删除属性

- 内置方法操作属性
对象.__getattribute__(属性):获取该实例对象的指定属性值,没有会报错
对象.__setattr__(属性, 属性值):设置该实例对象的属性值,有就修改,没有就增加,无返回值
对象.__delattr__(属性):删除该实例对象的属性,无返回值
- 对象关系方法:是内置函数,判断
- 属性调用过程
- 魔法方法
- 定义:两个下划线在两边,中间是单词,有特殊含义的方法我们称为魔法方法,一般都是python已经规定好的(特殊情况会被自动调用)

- __new__()方法:创建实例,最先执行,我们的实例对象是通过object的__new__魔法方法创建的,__new__是创建实例

- 单例模式:类始终只有一个实例存在,不会同时出现多个实例,是为了节约空间,是一种设计模式(为了优化代码)
![C:\Users\巧克力\AppData\Roaming\Tencent\Users\2947131463\QQ\WinTemp\RichOle\N%GZV]H{WDZ%MO~XE`07GR8.png](https://img2023.cnblogs.com/blog/3258905/202309/3258905-20230906162720676-822082121.png)
单列模式的另一种写法

- 输出魔法方法:__str__(),__repr__()
__str__():重新修改该方法,改变实例对象输出显示的内容(不显示地址,显示有用的属性数据),print的时候执行

__repr__():重写该方法,改变实例对象在交互模式中,直接写变量名显示的内容,交互模式,直接输入实例变量名执行

__call__(self,x,y): 变成函数一样可以调用
![C:\Users\巧克力\AppData\Roaming\Tencent\Users\2947131463\QQ\WinTemp\RichOle\F2E1NPLBZLY@6]F5IN1K($M.png](https://img2023.cnblogs.com/blog/3258905/202309/3258905-20230906162720583-1296726706.png)
- 协议
- 定义:类似于我们实际生活中的合同,你签订了这份协议,就得按照指定的来,我会给你对应的功能(甲方:提供给你对应的功能;乙方:按规定来使用)
- 格式:协议的格式有一定要求,有些的是需要有return
- 作用:让我们自己定义类能够使用python提供的功能,一些内置函数
- 本质:魔法方法
- 枚举函数:enumerate(列表)
- 序列协议:就是让类有,序列类型的功能,必须有__len__, __getitem__,__setitem__,__delitem__等协议,如果不需要改变,那后两个就不要定义

- 迭代协议:只要类实现了__iter__ 和 __next__ 方法,则这个类就是迭代器,因此只要实现这两个方法,则是可以迭代对象。让我们的类变成可迭代的类,能够使用for循环迭代

- 上下文协议:我们之前讲过的with的使用,只要类里面定义__enter__和__exit__这两个方法,则可以使用with去使用此对象。with关键字缩进里面的代码之前会执行__enter__协议方法,缩进里面的代码执行完会执行__exit__方法。

本文来自博客园,作者:chocolateone,转载请注明原文链接:https://www.cnblogs.com/chocolateone/p/17682656.html

浙公网安备 33010602011771号