在python中,如何创建一个只能初始化一次的抽象基类?

问题描述 投票:0回答:0

我有这段代码

import abc


class SingletonABCMeta(abc.ABCMeta):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(SingletonABCMeta, cls).__call__(*args, **kwargs)
        return cls._instances[cls]


class Cabc(abc.ABC):
    __metaclass__ = SingletonABCMeta

    @abc.abstractmethod
    def foo(self): pass


class C(Cabc):

    def __init__(self, a):
        print(f"initializing with {a}")
        self._a = a

    def foo(self):
        return self._a


class DoubleC(Cabc):

    def __init__(self, a):
        print(f"initializing with {a}")
        self._a = a

    def foo(self):
        return self._a * 2


if __name__ == "__main__":
    print(C(2).foo())
    print(DoubleC(2).foo())

    print(C(3).foo())
    print(DoubleC(3).foo())

它回来了

initializing with 2
2
initializing with 2
4
initializing with 3
3
initializing with 3
6

但我希望它回来

initializing with 2
2
initializing with 2
4
2
4

我该怎么做?

python oop singleton abstract-class
© www.soinside.com 2019 - 2024. All rights reserved.