确保在初始化类对象时创建唯一实例

时间:2019-06-19 18:50:58

标签: python-3.x oop

什么是确保在初始化类对象时仅创建唯一实例的好方法,请在回答中具体说明。

例如,对于以下类,我想确保在创建带有StateMachineSystems的{​​{1}}实例时,任何后来创建的对象(在这种情况下为'TEST')都指向{{1} }。

y

1 个答案:

答案 0 :(得分:1)

我认为看完单例设计模式后,这对我有用。

class Singleton(type):
    _instances = {}
    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
        return cls._instances[cls]

class StateMachineSystems(metaclass=Singleton):

    def __init__(self,system_name):
        self.system_name = system_name

    def set_sequence_number(self,sequnce_number):
        self.sequnce_number = sequnce_number

    def get_sequence_number(self):
        return self.sequnce_number

    def get_system_name(self):
        return self.system_name

x = StateMachineSystems('TEST')
x.set_sequence_number('1234')
print(x.get_sequence_number())

y = StateMachineSystems('TEST')
print(y.get_sequence_number())

y.set_sequence_number('4321')
print(y.get_sequence_number())
print(x.get_sequence_number())
............
1234
1234
4321
4321