为什么在uniu()之后总是被调用?

  • 问题:
  • 我只是想简化我的一个类,并引入了一些与flyweight design pattern

    但是,我有点搞不懂为什么总是在\u优new\之后调用。我没想到会这样。有人能告诉我为什么会发生这种情况吗?如果不是这样,我如何实现这个功能?(除了把实现放进\uuu new_优中之外,这让人觉得很麻烦。)

    下面是一个例子:

    class A(object):
    _dict = dict()

    def __new__(cls):
    if 'key' in A._dict:
    print "EXISTS"
    return A._dict['key']
    else:
    print "NEW"
    return super(A, cls).__new__(cls)

    def __init__(self):
    print "INIT"
    A._dict['key'] = self
    print ""

    a1 = A()
    a2 = A()
    a3 = A()

    输出:

    NEW
    INIT

    EXISTS
    INIT

    EXISTS
    INIT

    为什么?在

  • 答案:
  • 当您需要控制时,请使用新建

    使用

    。它被称为第一个

    相比之下,

    一般来说,你不需要

    自2008年4月起发布:When to use __new__ vs. __init__?在邮件.python.org一

    你应该考虑到你要做的通常是用Factory这是最好的办法。使用新的不是一个好的清洁解决方案,因此请考虑使用工厂。这里有一个很好的工厂示例