网站制作学习网Python→正文:python中的魔术方法
字体:

python中的魔术方法

Python 2024/11/20 9:34:48  点击:不统计

转载%77%77%77请%2E%66%6F%72%61%73%70%2E%63%6E注明

 python 提供的定义在类或者基础类中的基础方法
比如类中的 __init__(self)等
 
1. class类中的魔术方法,对象方法
(1)__new__(self,) 创建对象,有返回值,返回对象。
(2)__init__(self) 初始化对象无返回值
(3)__del__(self) 析构函数,对象被释放运行,实际运行时间位置不稳定
(4)__repr__(self) 返回当前对象字符串,返回详细信息
(5)__str__(self) 返回当前对象字符串,注重可读性
(6)__format__(self,[a]) 当指定输出格式时,自动调用格式化
(7)__bytes__(self) ,调用方式 bytes(ClassA()), 当被转换为bytes时调用
(8)__eq__(self,a,b),替换原来的==判断,原来判断两个对象或者字符串默认是通过is 来判断是否相等,如果定义了__eq__(self)方法,则可以自行通过内容等去判断,不再是is方法判断。可以根据实际返回自己想要的值。 
__ne__ 不等于
__lt__ 小于
__gt__ 大于
 
2.class类中的魔术方法,对象属性方法
(1)__getattr__(self,name) 获取属性方法。只有当没有该属性名称时调用
(2)__getattribute__(self.name) 获取属性方法,尝试获取属性时调用,不管是否存在该属性。
 
调用时如果内部需要使用__getattribute__需要使用super.__getattribute__()
避免出现 递归循环调用自己。
(3) __setattr__(self,name,value) 设置一个属性
(4) __delattr__(self,name) 删除一个属性 del obj.name 时调用,如果内部有调用删除,需要使用super调用__delattr__(name)
(5)__get__(self,obj,owner) 获取描述,self  是被描述实例,obj所属对象实例 owner 是obj的class 类。
__set__ 设置描述
(6) __slots__ = ['name1',]类属性的白名单,只允许有的属性名称
 
3. 与类建立相关的魔术方法
(1)  __init_subclass__(cls) 定义再父类(基类),当子类定义继承父类时运行
(2) __set_name__(self,owner,name) 当类实例化对象后成为别的类的属性时调用
(3) __class_getitem__(cls,item) 描述类属性,是类属性不是对象属性
(4) __mro_entries__(self,bases) 继承某个基类对象时,自动转换为对象的类,
返回 tuple(基类)
 
(5) @classmethod def __prepare__(cls,name,bases,**kwds)构建类的命名空间时运行
(6) __instancecheck__(self,instance) 判断是不是某个类的对象,使用isinstancd
(7) __subclasscheck__(self,subclass) 判断是不是某个类的子类 ,使用issubclass
 
4. 对数据相关操作运算
(1) __add__(self, other_obj) 定义两个对象相加调用,自己写对应的处理方法
同理
__sub__ 减法
__mul__ 乘法
__mamul__ 矩阵乘法
__truedev__ 除法
__floordev__ 带符号除法
__mod__ 求余数
__devmod__ 即拿到商又有余数
__pow__ 平方, x**y 的时候,表示x的y次方
__lshift__ 左移
__rshift__ 右移
__and__ 求和 重写&
__xor__ 异或  
__or__ 或者 重写 |
__repr__ 获取当前属性作为内容
__i[xxx]__ 以 符号方法求值的都有该方法 比如 += 
__neg__ 获取当前 负值属性(前面为负号的对象)
__pos__ 获取当前 正值属性(前面为正号的对象)
__abs__ 取绝对值
__invert__ 取反的时候调用(前面为波浪线的对象)
__int__ 转换为int
__float__ 转换为float
__complex__ 转换为 复合数据,调用complex时
__index__ 调用将对象作为索引使用时
__round__  四舍五入
__trunc__ 向0 取整
__floor__ 向下取整
__ceil__ 向上取整
 
5. 模拟对象
__call__ 让对象可以调用,使用函数一样使用对象
__len__ 对象容器list或者dict 获取长度时运行。如果没有当以__bool__方法,如果当做判断,会取对应当前方法长度作为判断
__lenght_hint__ 返回估计长度
__getitem__ 用方括号时调用,比如索引或者 key
__setitem__ 用方括号赋值 参数值
__delitem__ 调用 del 方括号 时调用
__reversed__ 调用reversed 时使用
__contains__ 判断是否存在 in 操作时
__iter__ 迭代 for 循环
__missing__ 只有在dict 继承subclass ,找不到对应 key时运行
__enter__ with 使用进入时
__exit__ with 使用出来时
 
总结来自于 https://space.bilibili.com/245645656/channel/collectiondetail?sid=1023741&spm_id_from=333.788.0.0 码农高夫

原载于:本文原载于www.forasp.cn

·上一篇:python 对接调用支付宝接口 >>    ·下一篇:python中is和==区别 >>
推荐文章
最新文章