将 +/- 运算符的值作为前缀返回,而没有要在 class 对象上添加或减去的实际值?

Returning the value of a +/- operator as a prefix with no actual value to add or subtract on a class object?

当没有要添加或减去的实际值时,我如何才能在 class 对象上使用 +/- 运算符? 我假设示例代码中的实际值为 0:

x = 2.5
print(+x)
print(-x)
print(0-x)

>>> 2.5
>>> -2.5
>>> -2.5

但是,当在我的 class Interval 的 __add____radd__ 方法上执行此操作并试图解释不存在或 0 时?值,我得到 TypeError: bad operand type for unary +: '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__ 以保持 post 更短。

我是不是处理方法不对?我假设 +x 会使用 __add__ 方法,但也许我在这里错了?

一元 +- 运算符使用 __pos__()__neg__() 特殊方法。

(我想举一个比这更好的例子,但我被叫走了。这应该可以说明这个想法。就像使用 __add__() 等一样,您想要创建和 return 具有正确值的新对象)

举个例子:

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!"