运算符重载的限制 [Python]

大多数Python运算符和增量赋值都能重载,如下:

可以重载的常见运算符和增量赋值语句
+
-
*
**
/
//
%

>>
&
|
^
~

>

>=
==
!=
+=
-=
*=
**=
/=
//=
%=

>>=
&=
^=
|=
[]
()
.
``
in





不能通过重载来改变运算符的优先级。但是,可在表达式中使用圆括号强制重载运算符的求值顺序。不可通过重载来改变一个运算符的顺序关联性。

不能改变运算符取得操作数的个数。重载的一元运算符仍然是一元运算符,重载的二元运算符仍然是二元运算符。运算符+和-都有一元和二元的版本;这些一元和二元版本可单独重载(使用不同的方法名)。注意,不能创建新的运算符,只能对现有的运算符进行重载。

运算符对内建类型的对象的操作方式不能通过运算符重载加以改变。例如,不能改变运算符+用于对两个整数进行相加的含义。运算符重载只适用于用户自定义类的对象,或者用户自定义类的对象与内建类型的对象的混合形式。

如果重载一元算术运算符(例如+,-和*),会自动重载与运算符对应的增量赋值语句。举个例子来说,如果重载一个加法运算符,从而允许以下形式的语句:

object2 = object2 + object1

那就表示+=增量赋值语句也会重载,从而允许以下形式的语句:

object2 += object1

在这个例子中,尽管程序员不必定义一个方法来重载+=赋值语句,但通过为那个类显式地定义方法,也可实现同样的行为。