我了解__new__
它的作用(以及它与 的区别__init__
)所以我对定义不感兴趣,我对何时以及如何使用__new__
.
文档说:
通常,
__new__
除非您将不可变类型(如str
,或int
unicode
tuple
但是我想不出要使用的其他情况__new__
或如何正确使用它(例如,当子类化不可变类型或在这种情况下为什么需要它时)。
那么,何时、为什么以及如何使用__new__
?
我对用例感兴趣,而不是它的作用(我知道它的作用)。
我了解__new__
它的作用(以及它与 的区别__init__
)所以我对定义不感兴趣,我对何时以及如何使用__new__
.
文档说:
通常,
__new__
除非您将不可变类型(如str
,或int
unicode
tuple
但是我想不出要使用的其他情况__new__
或如何正确使用它(例如,当子类化不可变类型或在这种情况下为什么需要它时)。
那么,何时、为什么以及如何使用__new__
?
我对用例感兴趣,而不是它的作用(我知道它的作用)。
为自己回答,我用它来
__new__
)__call__
我认为也可以使用)datetime.datetime
类(它是不可变的)以在没有参数的情况下返回当前时间,如果strptime
使用单个字符串参数调用则返回调用参数的结果如果您__new__
想更改用于构造不可变类型的参数,就像我在datetime
示例中想要的那样,或者如果您根本不想调用父__new__
级但返回一个以另一种方式甚至是完全不同的类型。当您进入时,__init__
以任何方式更改对象都为时已晚,因此您需要在__new__
.
一个潜在的用例可能是一个“工厂类”,它根据实现返回各种类的实例。