如何根据输入创建单例类?

时间:2011-07-20 15:22:02

标签: python

我有一个定义为

的类
class Conditional_Singleton(object):
    def __init__(self, condition=None):
        self.initialization = some_func_of(condition)

由于“初始化”步骤确实需要花费大量时间来运行并且输出可能很大,我真的希望在给定相同输入的情况下不能一次又一次地重新创建类,但是一旦输入改变就这样做。有任何想法吗?

2 个答案:

答案 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

这是否符合您的要求将取决于您是否可以简化条件以便用作字典键。