Python运算符重载和特殊方法
- 数据结构与算法 [面向对象编程]
- 操作系统: Windows 10
- Anaconda 2019.3 Python 3.7.1
概念
Python的内置类为许多操作提供了自然的语义。比如,a + b 语句可以调用数值类型语句,也可以连续序列类型。
但是对于新的类来说,“+” 操作符是未定义的,所以就需要 操作符重载 (Operator Overloading) 技术来定义它
特殊方法实现的重载操作
常见的语法 | 特别方法的形式 |
---|---|
a + b | a._add(b) 或者 b.\radd_(a) |
a - b | a._sub(b) 或者 b.\rsub_(a) |
a * b | a._mul(b) 或者 b.\rmul_(a) |
a / b | a._truediv(b) 或者 b.\rtruediv_(a) |
a // b | a._floordiv(b) 或者 b.\rfloordiv_(a) |
a % b | a._mod(b) 或者 b.\rmod_(a) |
a ** b | a._pow(b) 或者 b.\rpow_(a) |
a << b | a._lshift(b) 或者 b.\rlshift_(a) |
a >> b | a._rshift(b) 或者 b.\rrshift_(a) |
a & b | a._and(b) 或者 b.\rand_(a) |
a ^ b | a._xor(b) 或者 b.\rxor_(a) |
a | b | a._or(b) 或者 b.\ror_(a) |
a += b</br>a -= b</br>a *= b</br>… | a._iadd(b)</br>a.\isub(b)</br>a.\imul_(b)</br>… |
+ a | a._pos_(b) |
- a | a._neg_(b) |
~ a | a._invert_(b) |
abs(a) | a._abs_(b) |
a < b | a._lt_(b) |
a <= b | a._le_(b) |
a > b | a._gt_(b) |
a >= b | a._ge_(b) |
a == b | a._eq_(b) |
a != b | a._ne_(b) |
vin a | a._contains_(v) |
a [k] | a._getitem_(k) |
a [k] = v | a._setitem_(k,v) |
del a [k] | a._delitem_(k) |
a(arg1, arg2, ···) | a._call_(arg1, arg2, ···) |
len(a) | a._len_() |
hash(a) | a._hash_() |
iter(a) | a._iter_() |
next(a) | a._next_() |
bool(a) | a._bool_() |
float(a) | a._float_() |
int(a) | a._int_() |
repr(a) | a._repr_() |
reversed(a) | a._reversed_() |
str(a) | a._str_() |
演示实例
我们创建一个 Vector 的多维向量类的实现方法,代表了多维空间中的向量的坐标,如坐标<5, -2, 3>相加坐标<1, 4, 2>的结果是使用列表进行计算得到<5, -2, 3, 1, 4, 2>, 我们现在将使用运算符重载来实现我们的需求
1 |
|
Demo on Github : Python运算符重载和特殊方法
Python运算符重载和特殊方法
https://blog.forgiveher.cn/posts/1555335611/