Python常用的魔法方法有几种?用法是什么?
Admin 2021-08-19 群英技术资讯 391 次浏览
Python常用的魔法方法有几种?用法是什么?新手学习Python,可能对于算数运算符的魔法方法和反运算相关的魔法方法不是很了解,对此,下面小编就给大家介绍一下Python常用的魔法方法,感兴趣的朋友就继续往下看吧。
运算符 | 对应的魔法方法 | 中文注释 |
+ | __ add__(self, other) | 加法 |
- | __ sub__(self, other) | 减法 |
* | __ mul__(self, other) | 乘法 |
/ | __ truediv__(self, other) | 真除法 |
// | __ floordiv__(self, other) | 整数除法 |
% | __ mod__(self, other) | 取余除法 |
divmod(a, b) | __ divmod__(self, other) | 把除数和余数运算结果结合,divmod(a,b)返回值是一个元组(a//b, a%b) |
** | __ pow__(self, other[,modulo]) | self的other次方再对modulo取余 |
<< | __ lshift__(self, other) | 按位左移 |
>> | __ rshift__(self, other) | 按位右移 |
& | __ and__(self, other) | 按位与操作 |
^ | __ xor__(self, other) | 按位异或操作(同为0,异为1) |
丨 | __ or__(self, other) | 按位或操作(有1则1) |
-C | -C | -C |
>>> 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
继承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
魔法方法 | 定义 |
__ radd__(self, other) | 定义加法的行为:+(当左操作数不支持相应的操作时被调用) |
__ rsub__(self, other) | 定义减法的行为:-(当左操作数不支持相应的操作时被调用) |
__ rmul__(self, other) | 定义乘法的行为:*(当左操作数不支持相应的操作时被调用) |
__ rtruediv__(self, other) | 定义真除法的行为:/(当左操作数不支持相应的操作时被调用) |
__ rfloordiv__(self, other) | 定义整数除法的行为://(当左操作数不支持相应的操作时被调用) |
__ rmod__(self, other) | 定义取模算法的行为:%(当左操作数不支持相应的操作时被调用) |
__ rdivmod__(self, other) | 定义当被divmod()调用时的行为(当左操作数不支持相应的操作时被调用) |
__ rpow__(self, other) | 定义当被power()调用或**运算时的行为(当左操作数不支持相应的操作时被调用) |
__ rlshift__(self, other) | 定义按位左移位的行为:<<(当左操作数不支持相应的操作时被调用) |
__ rrshift__(self, other) | 定义按位右移位的行为:>>(当左操作数不支持相应的操作时被调用) |
__ rand__(self, other) | 定义按位与操作的行为:&(当左操作数不支持相应的操作时被调用) |
__ rxor__(self, other) | 定义按位异或操作的行为:^(当左操作数不支持相应的操作时被调用) |
__ ror__(self, other) | 定义按位或操作的行为:丨(当左操作数不支持相应的操作时被调用) |
-C | -C |
>>> 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:注:在重写反运算魔法方法时,一定要注意顺序问题。得到的应该是个负数,所以顺序改变下。
增量赋值运算的魔法方法
魔法方法 | 定义 |
__ iadd__(self, other) | 定义赋值加法的行为:+= |
__ isub__(self, other) | 定义赋值减法的行为:-= |
__ imul__(self, other) | 定义赋值乘法的行为:*= |
__ itruediv__(self, other) | 定义赋值真除法的行为:/= |
__ ifloordiv__(self, other) | 定义赋值整数除法的行为://= |
__ imod__(self, other) | 定义赋值取模算法的行为:%= |
__ ipow__(self, other) | 定义赋值幂运算的行为:**= |
__ ilshift__(self, other) | 定义赋值按位左移位的行为:<<= |
__ irshift__(self, other) | 定义赋值按位右移位的行为:>>= |
__ iand__(self, other) | 定义赋值按位与操作的行为:&= |
__ ixor__(self, other) | 定义赋值按位异或操作的行为:^= |
__ ior__(self, other) | 定义赋值按位或操作的行为:丨= |
- | - |
魔法方法 | 定义 |
__ neg__(self) | 定义正号的行为:+x |
__ pos__(self) | 定义负号的行为:-x |
__ abs__(self) | 定义当被abs()调用时的行为 |
__ invert__(self) | 定义按位求反的行为:~x |
-C | -C |
以上就是关于Python常用魔法方法的介绍,通过上述示例现在大家对于Python魔法方法应该都有所了解了吧,希望本文对大家学习python有帮助,想要了解更多Python魔法方法的内容,大家可以关注其他相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
把Word中的表格转到Excel中,顺便做一个调整。这个需求在实际工作中,很多人还是经常碰到的!本文就将介绍如何利用Python实现这一功能,需要的朋友可以了解一下
这篇文章介绍了Python中的进程操作模块(multiprocess.process),文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
在python的学习过程,有些同学对索引和切换会感到困惑,今天我们就来弄清楚它,下面这篇文章主要给大家介绍了关于python基础知识之索引与切片的相关资料,需要的朋友可以参考下
本文详细讲解了Pytest框架之fixture,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
pygame是Python的第三方库,里面提供了使用Python开发游戏的基础包。本文将介绍如何通过Pygame实现鼠标进行图片的移动与缩放,感兴趣的可以关注一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008