убедитесь, что уникальный экземпляр создан при инициализации объекта класса - PullRequest
0 голосов
/ 19 июня 2019

Что было бы хорошим способом убедиться, что при инициализации объекта класса создается только уникальный экземпляр, пожалуйста, будьте конкретны в своих ответах.

например, для следующего класса я хочу убедиться, когда ясоздать 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

1 Ответ

1 голос
/ 19 июня 2019

Я думаю, что после того, как я посмотрел на шаблон проектирования синглтона, это то, что мне подходит.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...