[译]为什么在__new __()后总是调用__init __()?

Posted everfight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[译]为什么在__new __()后总是调用__init __()?相关的知识,希望对你有一定的参考价值。

原文来源: https://stackoverflow.com/questions/674304/why-is-init-always-called-after-new

需要控制新实例的创建时,请使用__new__。

需要控制新实例的初始化时,请使用 init

__new__是实例创建的第一步。它首先被调用,并负责返回您的类的新实例。

相比之下, __ init__不会返回任何内容; 它只负责在创建实例后初始化它。

通常,除非您继承了str,int,unicode或tuple之类的不可变类型,否则不应该覆盖__new__。

来自:http://mail.python.org/pipermail/tutor/2008-April/061426.html

您应该考虑到您尝试做的事情通常是通过工厂完成的,这是最好的方法。使用__new__不是一个很好的清洁解决方案,所以请考虑工厂的使用。在这里你有一个很好的工厂例子。

以上是关于[译]为什么在__new __()后总是调用__init __()?的主要内容,如果未能解决你的问题,请参考以下文章

Python类中的__new__和__init__的区别

Python:总是使用 __new__ 而不是 __init__?

__new__静态方法

为啥`type.__new__`调用`__init_subclass__`?

魔法方法

JS可否 var a[id] = new init();创建对象数组、进行赋值?