简单记录python中的魔法方法
一、构造与析构
__init__(self[,...])
需要初始化时可重写__init__方法
__new__(cls[,...])
以类为参数,返回实例化对象
__del__(self)
前两个为构造器,此为析构器,用于销毁对象
二、算术运算
1、算术运算相关的魔法方法
python的算数运算魔法方法如下
以上方法可以自己定义,就可以修改对应的算数运算规则
2、反运算
正运算不支持,python会自动调用反运算
python反运算的魔法方法如下
同样的,反运算也可以重写
3、一元操作符
Python支持的一元操作符如下:
_ _neg_ _()表示正号行为
_ _pos_ _()表示定义负号行为
_ _abs_ _()表示定义abs()函数(取绝对值)被调用时的行为
_ _invert_ _()表示定义按位取反的行为
三、属性相关
属性相关的魔法方法如下
四、描述符相关
描述符就是将某种特殊类型的类的实例指派给另一个类的属性,特殊类型的类,里边要至少定义_ _get_ _()、_ _set_ _()或_ _delete_ _()三个特殊方法中的一个。
描述符相关的魔法方法如下
五、容器相关
在Python中,像序列类型(如列表、元组、字符串)或映射类型(如字典)都属于容器类型。
容器类型相关魔法方法如下:
定制容器,需要注意以下两点:
如果希望定制的容器不可变,则只需要定义_ _len_ _()和_ _getitem_ _()方法。
如果希望定制的容器是可变的,除了_ _len_ _()和_ _getitem_ _()方法,至少还需要定义_ _setitem_ _()和_ _delitem_ _()两个方法。
六、迭代器
关于实现迭代器的魔法方法有两个:_ _iter_ _()和_ _next_ _()。
一个容器如果是迭代器,那就必须实现_ _iter_ _()魔法方法,这个方法实际上就是返回迭代器本身,而_ _next_ _()魔法方法决定了迭代器的规则
七、相关补充
1、生成器
生成器其实是迭代器的一种实现,但迭代器需要我们去定义一个类和实现相关的方法,而生成器则只需要在普通的函数中加上一个yield语句即可
生成器的发明使得Python模仿协同程序的概念得以实现。
协同程序,是可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或者重新开始。
生成器可以暂时挂起函数,并保留函数的局部变量等数据,然后再次调用它的时候,从上次暂停的位置继续执行下去。
2、推导式
python有列表推导式、字典推导式、集合推导式等推导式可以使用,可以很大程度节约代码量。