2017-10-12 7 views
2
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) 

Je fais une classe de fabrique d'objets et dans ma fonction get_singleton ci-dessus, j'ai cette ligne:propriétés singleton nommés de façon dynamique à travers les instances en python

Factory.__setattr__(Factory, new_attribute, new_instance) 

Les docs disent que setattr veut une instance pour le premier paramètre, mais je voudrais être en mesure de mettre en place des propriétés dynamiquement nommées à travers les instances. De cette façon, la prochaine fois que j'appellerai la fonction get_singleton, elle retournera la même instance que j'ai créée lors des appels précédents. Je veux être capable de créer des propriétés singleton dynamiquement nommées entre instances.

Voici comment j'appelle cette fonction de l'extérieur:

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

Est-il possible de le faire en python?

Merci

Répondre

0

Ok, je me suis dit ma propre réponse. En utilisant settattr je suis capable de créer dynamiquement des attributs non-instance. Voici le code.

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]