- 问题:
-
我只是想简化我的一个类,并引入了一些与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这是最好的办法。使用新的
不是一个好的清洁解决方案,因此请考虑使用工厂。这里有一个很好的工厂示例