Python 为内置实例和类实例定义运算符
在Python中,您可以通过定义Python 为内置实例和类实例定义运算符,python,Python,在Python中,您可以通过定义\uuuuu add\uuuu来覆盖类的操作(比如,加法)。这将使添加具有其他值/实例的类实例成为可能,但不能向实例添加内置项: foo = Foo() bar = foo + 6 # Works bar = 6 + foo # TypeError: unsupported operand type(s) for +: 'int' and 'Foo' 是否有任何方法使其启用?当实例位于右侧时,必须定义重写运算符+的方法。不能重写整数的+运算符。您应该做的是仅在F
\uuuuu add\uuuu
来覆盖类的操作(比如,加法)。这将使添加具有其他值/实例的类实例成为可能,但不能向实例添加内置项:
foo = Foo()
bar = foo + 6 # Works
bar = 6 + foo # TypeError: unsupported operand type(s) for +: 'int' and 'Foo'
是否有任何方法使其启用?当实例位于右侧时,必须定义重写运算符
+
的方法。不能重写整数的+运算符。您应该做的是仅在Foo类中重写\uuu\radd\uuu(self,other)
函数。self
变量引用一个Foo
实例,而不是整数,other
变量引用+运算符左侧的对象。当计算bar=6+foo
时,尝试计算6.\uuuu add\uuuu(foo)
失败,然后Python尝试foo.\uuuu radd\uuuu(6)
(反向\uu add\uu
)。如果您在Foo
内部覆盖\uuuuuradd\uuuuu
,则反向的\uuuuuuu添加\uuuuu
成功,并且6+Foo
的计算是Foo.\uuuuuradd\uuuuuu6)
的结果
请注意,Python仍将尝试调用
\uuuuu add\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。我只有一个小的更正。您编写的other
变量引用右侧的对象,但它应该位于左侧。@halex:谢谢您的更正。我肯定是有意的。
def __radd__(self, other):
return self + other