python 中跨实例动态命名的单例属性
dynamically named singleton properties across instances in python
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)
我正在创建一个对象工厂 class,在上面的 get_singleton 函数中,我有这一行:
Factory.__setattr__(Factory, new_attribute, new_instance)
文档说 setattr 想要第一个参数的实例,但我希望能够跨实例设置动态命名的属性。这样下次我调用 get_singleton 函数时,它将 return 与我在之前调用中创建的相同 class 实例。我希望能够跨实例创建动态命名的单例属性。
下面是我如何从外部调用此函数:
manager = Factory().get_singleton('Manager')
python有没有办法做到这一点?
谢谢
好的,我想出了自己的答案。通过使用 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]
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)
我正在创建一个对象工厂 class,在上面的 get_singleton 函数中,我有这一行:
Factory.__setattr__(Factory, new_attribute, new_instance)
文档说 setattr 想要第一个参数的实例,但我希望能够跨实例设置动态命名的属性。这样下次我调用 get_singleton 函数时,它将 return 与我在之前调用中创建的相同 class 实例。我希望能够跨实例创建动态命名的单例属性。
下面是我如何从外部调用此函数:
manager = Factory().get_singleton('Manager')
python有没有办法做到这一点?
谢谢
好的,我想出了自己的答案。通过使用 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]