Hi I was wondering if there is a way to do a symmetric operator override in Python. For example, let's say I have a class:
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
Then I can do:
a = A(1)
a + 1
But if I try:
1 + a
I get an error. Is there a way to override the operator add so that 1 + a will work?
Just implement an __radd__ method in your class. Once the int class can't handle the addition, the __radd__ if implemented, takes it up.
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
For instance, to evaluate the expression x - y, where y is an instance of a class that has an
__rsub__()method,y.__rsub__(x)is called ifx.__sub__(y)returnsNotImplemented.
Same applies to x + y.
On a side note, you probably want your class to subclass object. See What is the purpose of subclassing the class "object" in Python?
来源:https://stackoverflow.com/questions/42071861/python-commutative-operator-override