在Python中,您可以通过定义__add__
来覆盖类的操作(例如,添加)。这样就可以使用其他值/实例添加类实例,但是不能向实例添加内置函数:
foo = Foo()
bar = foo + 6 # Works
bar = 6 + foo # TypeError: unsupported operand type(s) for +: 'int' and 'Foo'
有没有办法让这个启用?
答案 0 :(得分:6)
当您的实例位于右侧时,您必须定义方法__radd__(self, other)
以覆盖运算符+
。
答案 1 :(得分:4)
您不能覆盖整数的+运算符。您应该做的是仅覆盖Foo类中的__radd__(self, other)
函数 。 self
变量引用Foo
实例,而不是整数,other
变量引用+运算符的左侧侧的对象。评估bar = 6 + foo
时,评估6.__add__(foo)
的尝试失败,然后Python尝试foo.__radd__(6)
(反向__add__
)。如果您覆盖__radd__
内的Foo
,则反向__add__
成功,6 + foo
的评估结果为foo.__radd__(6)
。
def __radd__(self, other):
return self + other