魔术方法简单来说就是:在什么样的情况下,自动触发什么样的的魔法函数。这样理解魔法函数是不是简单了很多
分为:操作类魔法函数、算术相关的魔法函数、描述符相关的魔法函数、属性相关的魔法函数
操作类魔法函数
-
__ new (cls[ , …])
这是对象实例化时第一个被调用的方法,第一个参数不是self 而是类 cls,其他参数会传递给 init __方法。这个方法一般不需要写出来,可以当他完全不存在,但是当继承一个不可变的类型时需要把它写出来。
-
__ init __: 对象实例化时,自动调用的函数,如果当前类中没有,则向父类中查找。
-
__ call __ 实例化对象当函数使用的时候自动调用
-
__ str __ 实例化对象被当作字符串的时候自动调用
-
__ repr __ 实例化对象被当作字符串的时候自动调用,用法和上面过一个一样
属性相关的魔术方法
-
__ getattr __(self,name) 当试图获取一个不存在的成员时自动掉用
-
__ getattribute __(self,name) 当该类的成员被访问时自动调用
-
__ setattr__(self, name, value) 当一个成员被设置时自动调用。参数self:用来获取当前对象;参数name:被设置的属性名称,以字符串的形式出现;参数value:对属性名称设置的值。
注意:不能对成员进行直接赋值操作,否则引发死循环,如要避免,调用父类魔法函数
-
__ del __ (self,name) 当一个成员被删除时,自动调用。
描述符相关的魔法函数
就是将某种特殊类型的类指派给另一个类的属性
特殊类型的类必须在类里面定义 __ get__() 、__ set__() 、__ delete __()这三个特殊方法中的任意一个
- __ get__(self, instance, owner) :访问成员时自动调用
- __set __(self, instance, value): 对成员进行赋值操作时自动调用,不返回任何内容
- __ delete__(self, instance):对成员进行删除时自动调用,不返回任何内容
参数 self 是描述符类自身的实例,参数 instance 是类实例对象,参数 ower 是这个描述符的拥有者所在的类本身
一般而言这三种特殊的魔法函数和描述符property()一同使用,其中关系自己学的有点小懵逼,这个知识点暂且写在这个笔记里。
算术相关的魔法函数
常用的算术魔法函数,用法大同小异。
- __ add__(self, other):进行加法时自动调用: +
- __ sub__(self,other):进行减法时自动调用: -
- __ mul__(self,other)进行乘法时自动调用: *
- __ truediv __(self,other)进行数学除法时自动调用: /
- __ floordiv __(self, other)进行整数除法自动调用://