为内置和类实例定义运算符

时间:2012-10-20 17:32:13

标签: python

在Python中,您可以通过定义__add__来覆盖类的操作(例如,添加)。这样就可以使用其他值/实例添加类实例,但是不能向实例添加内置函数:

foo = Foo()
bar = foo + 6 # Works
bar = 6 + foo # TypeError: unsupported operand type(s) for +: 'int' and 'Foo'

有没有办法让这个启用?

2 个答案:

答案 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