运算符相关的魔术方法实在太多了,j就大概列举下面两类:
魔术方法 | 说明 |
---|---|
__cmp__(self, other) | 如果该方法返回负数,说明 self < other ; 返回正数,说明 self > other ; 返回 0 说明 self == other 。强烈不推荐来定义 __cmp__ , 取而代之, 最好分别定义 __lt__ , __eq__ 等方法从而实现比较功能。 __cmp__ 在 Python3 中被废弃了。 |
__eq__(self, other) | 定义了比较操作符 == 的行为 |
__ne__(self, other) | 定义了比较操作符 != 的行为 |
__lt__(self, other) | 定义了比较操作符 < 的行为 |
__gt__(self, other) | 定义了比较操作符 > 的行为 |
__le__(self, other) | 定义了比较操作符 <= 的行为 |
__ge__(self, other) | 定义了比较操作符 >= 的行为 |
来看个简单的例子就能理解了:
#!/usr/bin/env python3# -*- coding: UTF-8 -*-classNumber(object): def__init__(self, value): self.value=valuedef__eq__(self, other): print('__eq__') returnself.value==other.valuedef__ne__(self, other): print('__ne__') returnself.value!=other.valuedef__lt__(self, other): print('__lt__') returnself.value<other.valuedef__gt__(self, other): print('__gt__') returnself.value>other.valuedef__le__(self, other): print('__le__') returnself.value<=other.valuedef__ge__(self, other): print('__ge__') returnself.value>=other.valueif__name__=='__main__': num1=Number(2) num2=Number(3) print('num1 == num2 ? --------> {} \n'.format(num1==num2)) print('num1 != num2 ? --------> {} \n'.format(num1==num2)) print('num1 < num2 ? --------> {} \n'.format(num1<num2)) print('num1 > num2 ? --------> {} \n'.format(num1>num2)) print('num1 <= num2 ? --------> {} \n'.format(num1<=num2)) print('num1 >= num2 ? --------> {} \n'.format(num1>=num2))
输出的结果为:
__eq__ num1 == num2 ? --------> False __eq__ num1 != num2 ? --------> False __lt__ num1 < num2 ? --------> True __gt__ num1 > num2 ? --------> False __le__ num1 <= num2 ? --------> True __ge__ num1 >= num2 ? --------> False
魔术方法 | 说明 |
---|---|
__add__(self, other) | 实现了加号运算 |
__sub__(self, other) | 实现了减号运算 |
__mul__(self, other) | 实现了乘法运算 |
__floordiv__(self, other) | 实现了 // 运算符 |
___div__(self, other) | 实现了/运算符. 该方法在 Python3 中废弃. 原因是 Python3 中,division 默认就是 true division |
__truediv__(self, other) | 实现了 true division. 只有你声明了 from __future__ import division 该方法才会生效 |
__mod__(self, other) | 实现了 % 运算符, 取余运算 |
__divmod__(self, other) | 实现了 divmod() 內建函数 |
__pow__(self, other) | 实现了 ** 操作. N 次方操作 |
__lshift__(self, other) | 实现了位操作 << |
__rshift__(self, other) | 实现了位操作 >> |
__and__(self, other) | 实现了位操作 & |
__or__(self, other) | 实现了位操作 ` |
__xor__(self, other) | 实现了位操作 ^ |
可以关注下公众号:
这个公号可能很少更新,但是一更新,就是把整理的一系列文章更新上去。