【发布时间】:2010-10-15 00:42:38
【问题描述】:
我只是想简化我的一个类,并引入了一些与flyweight design pattern 风格相同的功能。
但是,我有点困惑为什么__init__ 总是在__new__ 之后调用。我没想到会这样。谁能告诉我为什么会发生这种情况以及如何实现此功能? (除了将实现放到__new__ 中,感觉很hacky。)
这是一个例子:
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
为什么?
【问题讨论】:
-
也在尝试理解设计模式,并且第一次听说 :flyweight 设计模式.. 以及在几乎所有流行语言中都有示例的非常好的链接。
-
不是单例吗?
标签: python design-patterns class-design