您好我想知道是否有办法在Python中执行对称运算符覆盖。例如,我们说我有一个班级:
class A:
def __init__(self, value):
self.value = value
def __add__(self, other):
if isinstance(other, self.__class__):
return self.value + other.value
else:
return self.value + other
然后我可以做:
a = A(1)
a + 1
但如果我尝试:
1 + a
我收到错误。 有没有办法覆盖运算符添加,以便1 + a可以工作?
答案 0 :(得分:5)
只需在班级中实施__radd__
方法即可。一旦int类无法处理添加,__radd__
如果实现,就会接受它。
class A(object):
def __init__(self, value):
self.value = value
def __add__(self, other):
if isinstance(other, self.__class__):
return self.value + other.value
else:
return self.value + other
def __radd__(self, other):
return self.__add__(other)
a = A(1)
print a + 1
# 2
print 1 + a
# 2
例如,要评估表达式x-y,其中y是一个实例 如果
__rsub__()
返回y.__rsub__(x)
,则会调用具有x.__sub__(y)
方法的类NotImplemented
。
同样适用于x + y
。
在旁注中,您可能希望您的类继承object
。见What is the purpose of subclassing the class "object" in Python?