首页 > 解决方案 > 确保在初始化类对象时创建唯一实例

问题描述

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

例如对于下面的类,我想确保当我创建一个StateMachineSystems 实例时,'TEST'任何后来创建的对象(y在这种情况下)指向x之前创建的。

class StateMachineSystems:

    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')
y = StateMachineSystems('TEST')

if x==y:
   print("single instance")

.... 
single instance

标签: python-3.xoop

解决方案


我认为在查看了单例设计模式之后,这对我有用。

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

推荐阅读