在Python中覆盖__new__方法的真实世界示例

时间:2014-06-09 07:47:12

标签: python class

我熟悉__new__ vs __init__的理论。前者定义了如何创建类的实例(内存中的新对象),而后者初始化它(分配初始状态属性 - 字段)。网络上有几篇关于此的文章,例如this one

  

当您需要控制新实例的创建时,请使用__new__。   需要控制新的初始化时,请使用__init__   实例

正如我所说,我确实了解其中的差异,然而,当我需要使用__new__代替__init__时,我无法想象一个现实世界的情况示例。如果我可以在对象创建期间自定义某些内容,我可以将其移动到对象初始化 - 只要它是同一个对象。上面提到的链接说:

  

一般情况下,除非你是,否则你不应该覆盖__new__   继承一个不可变的类型,如str,int,unicode或tuple。

接下来是我的问题 - 有人可以提供一个情况示例,当覆盖__new__实际上是使用__init__无法完成的正确解决方案时,为什么会这样?

1 个答案:

答案 0 :(得分:2)

单核模式 - 最明显的例子。 当你创造了另一个对象时 - 它不是单音,对吧? 因此,您必须在创建对象时处理此问题。解决方案的一个变体 - 使用__new__()方法。