3 回答

TA貢獻1770條經驗 獲得超3個贊
正如其他人在評論中指出的那樣,這正是__new__
目的。
以下是創建類的實例時發生的情況Complex
:
你寫
Complex(a, b)
。Complex.__new__(a, b)
被調用,并且默認情況下(即,如果您不覆蓋該__new__
方法)這將返回一個類型為 的空對象Complex
。如果
Complex.__new__(a, b)
(我們將其表示為cmplx
)返回的對象實際上是 typeComplex
, callcmplx.__init__(a, b)
或等效的 ,Complex.__init__(cmplx, a, b)
。
對于您的情況,只需在調用第二個參數時int
在__new__
方法中返回一個,否則調用__new__
超類的方法。那是:
class Complex:
def __new__(cls, a, b):
if b == 0:
return a
return super().__new__(cls) # or equiv.: object.__new__(cls)

TA貢獻1765條經驗 獲得超5個贊
不是某種 to-string 解決方案,類偽裝成它不是的東西。
不過,這不正是您要使用__str__
的嗎?也許我沒有正確理解您,但是如果您擔心無法對對象進行數學運算,則只需實現相關的魔術方法,例如__add__
.

TA貢獻1848條經驗 獲得超2個贊
如前所述,new
它比其他解決方案容易得多,因為一切都組裝在一起。您可以只說如果第二個參數為零,則再次返回a
else 調用__new__
。
我這可能正是您所需要的,因為您指出您很難找到解決方案。
添加回答
舉報