返回+/-操作符的值作为前缀,没有实际值可以在类对象上添加或减去?



当没有实际值要添加或减去时,我如何能够在类对象上使用+/-操作符?我将假设示例代码中的实际值为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!"