防止在__new__之后调用__init__?

时间:2015-07-03 12:57:04

标签: python constructor initialization super

这是我用来创建"缓存"的代码。实例:

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__

0 个答案:

没有答案