我熟悉__new__
vs __init__
的理论。前者定义了如何创建类的实例(内存中的新对象),而后者初始化它(分配初始状态属性 - 字段)。网络上有几篇关于此的文章,例如this one:
当您需要控制新实例的创建时,请使用
__new__
。 需要控制新的初始化时,请使用__init__
实例
正如我所说,我确实了解其中的差异,然而,当我需要使用__new__
代替__init__
时,我无法想象一个现实世界的情况示例。如果我可以在对象创建期间自定义某些内容,我可以将其移动到对象初始化 - 只要它是同一个对象。上面提到的链接说:
一般情况下,除非你是,否则你不应该覆盖
__new__
继承一个不可变的类型,如str,int,unicode或tuple。
接下来是我的问题 - 有人可以提供一个情况示例,当覆盖__new__
实际上是使用__init__
无法完成的正确解决方案时,为什么会这样?
答案 0 :(得分:2)
单核模式 - 最明显的例子。
当你创造了另一个对象时 - 它不是单音,对吧?
因此,您必须在创建对象时处理此问题。解决方案的一个变体 - 使用__new__()
方法。