总结Python常用的魔法方法
目录
- 一、算数运算符的魔法方法
- 二、反运算相关的魔法方法
- 三、增量赋值运算
- 四、一元操作符
一、算数运算符的魔法方法
- python2.2以后,对类和类型进行了统一,做法就是讲int()、float()、str()、list()、tuple()这些BIF转换为工厂函数(类对象)
- 给出以下算数运算符对应的魔法方法,前面和后面都被双下划线包尾说明是魔法方法
- eg:
>>> type(len) <class 'builtin_function_or_method'> #普通的BIF >>> type(int) <class 'type'> #工厂函数(类对象),当调用它们的时候,其实就是创建了一个相应的实例对象 >>> type(dir) <class 'builtin_function_or_method'> >>> type(list) <class 'type'> >>> a = int('123') #创建一个相应的实例对象a >>> b = int('345') >>> a + b #python在两个对象进行相加操作 468
- eg:举个例子,下面定义一个比较特立独行的类:
继承int,并重写__add__方法
>>> class New_int(int): def __add__(self,other): return int.__sub__(self,other) def __sub__(self,other): return int.__add__(self,other) >>> a = New_int(3) >>> b = New_int(5) >>> a + b #两个对象相加,触发 __add__(self,other)方法 -2 >>> a - b 8 >>> 实例2:错误写法,会造成无限递归 >>> class New_int(int): def __add__(self,other): return (self + other) def __sub__(self,other): return (self - other) >>> class New_int(int): def __add__(self,other): return (int(self) + int(other)) #将self与other强制转换为整型,所以不会出现两个对象相加触发__add__()方法 def __sub__(self,other): return (int(self) - int(other)) >>> a = New_int(3) >>> b = New_int(5) >>> a + b 8
二、反运算相关的魔法方法
- 反运算相关的魔法方法
>>> class int(int): def __add__(self,other): return int.__sub__(self,other) >>> a = int(3) >>> b = int(2) >>> a + b 1 反运算与算术运算符的不同之处是,反运算多了一个'r',例如 __add__()的反运算对应为 __radd__() >>> a + b 这里a是加数,b是被加数,如果a对象的__add__()方法没有实现或者不支持相应的操作,那么python就会自动调用b的__radd__()方法 实例: >>> class Nint(int): def __radd__(self,other): return int.__sub__(self,other) >>> a = Nint(5) >>> b = Nint(3) >>> a + b #由于a对象默认有__add__()方法,所以b的__radd__()没有执行 8 实例2: >>> class Nint(int): def __radd__(self,other): return int.__sub__(self,other) >>> b = Nint(5) >>> 3 + b #由于3无__add__()方法,所以执行b的反运算__radd__(self,other)方法,其中self是b对象 2
eg:注:在重写反运算魔法方法时,一定要注意顺序问题。得到的应该是个负数,所以顺序改变下。
三、增量赋值运算
增量赋值运算的魔法方法
四、一元操作符
- 一元操作符的魔法方法
到此这篇关于总结Python常用的魔法方法的文章就介绍到这了,更多相关Python魔法方法内容请搜索hwidc以前的文章或继续浏览下面的相关文章希望大家以后多多支持hwidc!