python-3.x - 确保在初始化类对象时创建唯一实例
问题描述
什么是确保在初始化类对象时仅创建唯一实例的好方法,请在您的答案中具体说明。
例如对于下面的类,我想确保当我创建一个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
解决方案
我认为在查看了单例设计模式之后,这对我有用。
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
推荐阅读
- python - Keras TFRecord 使用 vgg19 模型的输入变化——错误图已断开
- r - 如何将 json 转换为 tibble
- apache-flink - scala udf 在 flink sql 客户端中抱怨“java.lang.ClassNotFoundException”
- salesforce - 销售队伍:从经典到照明
- apache-spark - Spark SQL 本机语法和 Spark 中的 Hive QL 语法有什么区别?
- node.js - 在猫鼬中找到最受好评的产品
- laravel - 在 Laravel 中种子后向数据库添加记录的问题
- karate - 空手道机器人 - 如何获取元素属性?
- swift - XCTest 在运行测试的中途无限期挂起
- python - 当链接文本出现在 html 中时,为什么这会给我一个错误提示 NoSuchElementException?