當我沒有添加或減去的實際值時,我如何能夠對類物件執行 /- 運算子?我假設示例代碼中的實際值為 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__方法,但也許我在這里錯了?
uj5u.com熱心網友回復:
一元 和-運算子使用__pos__()和__neg__()特殊方法。
(我想舉一個比這更好的例子,但我被叫走了。這應該說明這個想法。就像使用__add__(), et al 一樣,你想要創建并回傳一個具有正確值的新物件)
舉個例子:
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!"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/336779.html
