Python中重写__new__方法的实际案例

3 投票
1 回答
511 浏览
提问于 2025-04-18 09:06

我对 __new____init__ 的理论有一些了解。前者是用来定义一个类的实例是如何被创建的(也就是在内存中生成一个新对象),而后者则是用来初始化这个实例(给它赋予初始状态的属性)。网上有一些关于这个的文章,比如这一篇

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

正如我所说,我确实理解它们之间的区别,但我无法想象一个现实世界的例子,说明我为什么需要使用 __new__ 而不是 __init__。如果我可以在对象创建时自定义一些东西,我可以把它移到对象初始化中——只要它还是同一个对象。前面提到的链接说:

一般来说,除非你在子类化一个不可变类型,比如 str、int、unicode 或 tuple,否则你不应该需要重写 __new__

所以我想问的是——有没有人能给我一个例子,说明重写 __new__ 实际上是一个正确的解决方案,而这在使用 __init__ 时无法做到,为什么会这样呢?

1 个回答

2

单例模式 - 最明显的例子。
当你创建了一个新的对象时,它就不是单例了,对吧?
所以,在你创建对象的时候,得处理好这个问题。解决这个问题的一种方法是使用 __new__() 方法。

撰写回答