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__
。
我这可能正是您所需要的,因为您指出您很难找到解决方案。
添加回答
举报