当没有实际值要添加或减去时,我如何能够在类对象上使用+
/-
操作符?我将假设示例代码中的实际值为0:
x = 2.5
print(+x)
print(-x)
print(0-x)
>>> 2.5
>>> -2.5
>>> -2.5
然而,在我的类Interval上对其__add__
和__radd__
方法执行此操作并试图解释不存在或0时?值,我得到TypeError:错误的操作数类型为一元+:'Interval'
class Interval:
def __init__(self, mini, maxi):
self.mini = mini
self.maxi = maxi
def __add__(self, other):
if isinstance(other,(int,float)):
mini_sum = self.mini + other
maxi_sum = self.maxi + other
return Interval(mini_sum, maxi_sum)
elif isinstance(other, Interval):
mini_sum = self.mini + other.mini
maxi_sum = self.maxi + other.maxi
return Interval(mini_sum, maxi_sum)
elif other == 0 or None:
return Interval(self.mini, self.maxi)
else:
raise TypeError('Value to add must be an int, float, or Interval class object')
if __name__ == '__main__':
x = Interval(2.5,3.0)
print(+x)
>>> TypeError: bad operand type for unary +: 'Interval'
我的__add__
和__radd__
有相同的代码,所以我只包括__add__
以保持帖子更短。
我用错误的方法处理这个吗?我假设+x
会使用__add__
方法,但也许我错了?
一元+
和-
操作符使用__pos__()
和__neg__()
的特殊方法。
__add__()
等一样,您希望创建并返回一个具有正确值的新对象)
例如:
class Foo:
def __neg__(self):
return "I'm a negative Foo!"
def __pos__(self):
return "I'm a positive Foo!"
>>> f = Foo()
>>> +f
"I'm a positive Foo!"
>>> -f
"I'm a negative Foo!"