在sympy
每個對象是Basic類的子類,並且它們都使用__new__
沒有__init__
,而且大多是像爲什麼sympy覆蓋`__new__`而不是`__init__`?
def __new__(cls, some, parameter, **others):
obj = parentclass.__new__(cls, **others)
obj.some = some
obj.parameter = parameter
return obj
什麼區別使用__init__
像
def __init__(self, some, parameter, **others):
parentclass.__init__(self, **others) # or super().__init__(...)
self.some = some
self.parameter = parameter
?
我猜他們都應該是不可變的? – 2013-04-10 14:54:19
@MartijnPieters - 我認爲它們需要可以被排除以避免重做已經完成的工作。 – mgilson 2013-04-10 14:56:18
這可能只是一個歷史事故;較舊的版本(例如0.5.x)具有明顯更復雜的結構,可能是合理的。 – ecatmur 2013-04-10 17:26:11