[英]Define operator for built-in and class instance
在Python中,您可以通过定义__add__
来覆盖类的操作(例如加法)。 这将使添加具有其他值/实例的类实例成为可能,但是您不能将内置实例添加到实例中:
foo = Foo()
bar = foo + 6 # Works
bar = 6 + foo # TypeError: unsupported operand type(s) for +: 'int' and 'Foo'
有什么办法可以做到这一点?
当实例在右侧时__radd__(self, other)
必须定义方法__radd__(self, other)
来覆盖运算符+
。
您不能为整数覆盖+运算符。 您应该做的是仅覆盖Foo类中的__radd__(self, other)
函数。 self
变量引用一个Foo
实例,而不是整数, other
变量引用+运算符左侧的对象。 当计算bar = 6 + foo
,尝试评估6.__add__(foo)
失败,然后Python尝试foo.__radd__(6)
(反向__add__
)。 如果您在Foo
重写__radd__
,则反向__add__
成功,并且对6 + foo
的求值是foo.__radd__(6)
。
def __radd__(self, other):
return self + other
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.