我有一个定义为
的类class Conditional_Singleton(object):
def __init__(self, condition=None):
self.initialization = some_func_of(condition)
由于“初始化”步骤确实需要花费大量时间来运行并且输出可能很大,我真的希望在给定相同输入的情况下不能一次又一次地重新创建类,但是一旦输入改变就这样做。有任何想法吗?
答案 0 :(得分:4)
class Conditional_Singleton(object):
saved_insances = {}
def __new__(cls, condition = None):
if not condition in cls.saved_instances:
cls.saved_instances[condition] = super(
Conditional_Singleton, cls).__new__(cls)
return cls.saved_instances[condition]
def __init__(self, condition = None):
if not getattr(self, 'initialization'):
self.initialization = some_func_of(condition)
这将在类本身中保存已创建实例的dict,并在传递相同条件时自动重用它们。
编辑:刚刚看到你的评论。你需要找到一个散列condition
的好方法才能使它工作,所以除非它是从一个实现__hash__
的类派生的,否则你需要自己实现它。
编辑2:对单身人士使用__new__
而不是__init__
。
答案 1 :(得分:1)
您可能会做这样的事情:
myInstances = {}
myInstances['condition'] = Conditional_Singleton('condition')
在代码的其他部分,您可以执行以下操作:
if 'condition' in myInstances:
# something down here that works with that instance
这是否符合您的要求将取决于您是否可以简化条件以便用作字典键。