将 +/- 运算符的值作为前缀返回,而没有要在 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!"
当没有要添加或减去的实际值时,我如何才能在 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!"