Python中重写__new__方法的实际案例
我对 __new__
和 __init__
的理论有一些了解。前者是用来定义一个类的实例是如何被创建的(也就是在内存中生成一个新对象),而后者则是用来初始化这个实例(给它赋予初始状态的属性)。网上有一些关于这个的文章,比如这一篇:
当你需要控制新实例的创建时,使用
__new__
。当你需要控制新实例的初始化时,使用__init__
。
正如我所说,我确实理解它们之间的区别,但我无法想象一个现实世界的例子,说明我为什么需要使用 __new__
而不是 __init__
。如果我可以在对象创建时自定义一些东西,我可以把它移到对象初始化中——只要它还是同一个对象。前面提到的链接说:
一般来说,除非你在子类化一个不可变类型,比如 str、int、unicode 或 tuple,否则你不应该需要重写
__new__
。
所以我想问的是——有没有人能给我一个例子,说明重写 __new__
实际上是一个正确的解决方案,而这在使用 __init__
时无法做到,为什么会这样呢?
1 个回答
2
单例模式 - 最明显的例子。
当你创建了一个新的对象时,它就不是单例了,对吧?
所以,在你创建对象的时候,得处理好这个问题。解决这个问题的一种方法是使用 __new__()
方法。