这是我用来创建"缓存"的代码。实例:
class Foo(object):
_instances = {}
def __new__(cls, index):
if index in cls._instances:
return cls._instances[index]
instance = super().__new__(cls)
cls._instances[index] = instance
return instance
def __init__(self, index):
print('__init__: {0}'.format(index))
当我已经拥有相同索引的实例时,会出现问题;除了返回现有实例之外它什么都不做,但它也会在新实例上调用__init__
:
>>> f = Foo(1)
__init__: 1
>>> f.x = True
>>> b = Foo(1)
__init__: 1
>>> b.x
True
问题是b = Foo(1)
还会打印__init__: 1
,当它不应该是#{1}}时。 (我不想要它)。
有没有办法阻止在这种情况下调用__init__
?