文章目录
- 六、运算符相关的魔术方法
- 1、比较运算符
- 2、算术运算符
 
六、运算符相关的魔术方法
1、比较运算符
| 魔术方法 | 说明 | 
|---|---|
| __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 -*-class Number(object):def __init__(self, value):self.value = valuedef __eq__(self, other):print('__eq__')return self.value == other.valuedef __ne__(self, other):print('__ne__')return self.value != other.valuedef __lt__(self, other):print('__lt__')return self.value < other.valuedef __gt__(self, other):print('__gt__')return self.value > other.valuedef __le__(self, other):print('__le__')return self.value <= other.valuedef __ge__(self, other):print('__ge__')return self.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
2、算术运算符
| 魔术方法 | 说明 | 
|---|---|
| __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) | 实现了位操作 ^ | 
