【问题标题】:Overriding __new__ and __init__ in Python [duplicate]在 Python 中覆盖 __new__ 和 __init__ [重复]
【发布时间】:2011-04-04 18:50:22
【问题描述】:

可能重复:
Python's use of __new__ and __init__ ?

按照我的理解,__init__与Java中的构造函数不同,因为__init__只初始化一个已经隐式构造的对象(因为__init__是在__new__之后调用的)。但是,我曾经需要定义的所有内容都使用了 Java 中“构造函数”的后一种属性。程序员想要覆盖__new__ 的情况是什么?

编辑:为了记录,我问的部分原因是我想知道覆盖 new 与在接受中使用单独的类方法有什么优点/缺点回答这个问题:

Moving Beyond Factories in Python

【问题讨论】:

  • 在我看来并不完全一样

标签: python


【解决方案1】:

__new__ 实际上发生在对象存在之前。它是该类型的静态方法。 __new__ 的用途是当您想要控制新对象的创建时,例如单身人士。如果你的__new__ 总是返回一个对象的同一个实例,它就是一个单例。 __init__ 无法做到这一点。

一般来说,在“Guido 所期望的 Python”中,您不应该每月使用 __new__ 超过一次 :)

【讨论】:

【解决方案2】:

__new__ 用于创建新对象实例,__init__ 用于初始化它。

我认为如果你设计一个不可变类型,你必须在__new__ 中初始化它,例如参见namedtuple(也可以是Python's use of __new__ and __init__?)。

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 2016-04-19
    • 2011-06-19
    • 2010-10-19
    • 2016-02-01
    • 1970-01-01
    • 2014-03-01
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多