在python中跨实例动态命名单例属性

时间:2017-10-12 23:59:32

标签: python oop dynamic factory

class Factory:
    def get_singleton(self, class_name):
        if class_name not in Factory.__dict__:
            new_instance = self.get_new_instance(class_name)
            new_attribute = self.get_attribute_name_from_class_name(class_name)
            Factory.__setattr__(Factory, new_attribute, new_instance)
            return Factory.__getattribute__(new_attribute)

我正在创建一个对象工厂类,在上面的get_singleton函数中,我有这一行:

Factory.__setattr__(Factory, new_attribute, new_instance)

文档说 setattr 想要第一个参数的实例,但我希望能够跨实例设置动态命名的属性。这样,下次我调用get_singleton函数时,它将返回我在之前调用时创建的同一个类实例。我希望能够跨实例创建动态命名的单例属性。

以下是我从外面调用此函数的方法:

manager = Factory().get_singleton('Manager')

有没有办法在python中执行此操作?

由于

1 个答案:

答案 0 :(得分:0)

好的,我想出了自己的答案。通过使用settattr我能够动态创建非实例属性。这是代码。

class Factory:
    @staticmethod
    def get_singleton(class_name):
        new_attribute = Factory.get_attribute_name_from_class_name(class_name)
        if new_attribute not in Factory.__dict__:
            new_instance = Factory.get_new_instance(class_name)
            setattr(Factory, new_attribute, new_instance)
        return Factory.__dict__[new_attribute]