2016-07-04 17 views
1

Ich möchte verschiedene Objekte ändern. Im Moment übergebe ich einen Flags-Parameter, um zu entscheiden, ob die Änderungen durchgeführt werden sollen oder nicht. Gibt es eine Möglichkeit, das zu schaffen, ohne irgendwelche Flaggen zu passieren, oder ist dies der beste Weg? Ich habe nicht das Gefühl, dass dies eine skalierbare Lösung ist, sobald ich mehr Instanzen der Objekte habe.Ändern Sie verschiedene Objekte ohne Flags zu überprüfen

def modifyfunc(self, flags, id_to_modify, value): 
    if flags['object1']: 
    self.object1.modify(id_to_modify, value) 
    if flags['object2']: 
    self.object2.modify(id_to_modify, value) 
    if flags['object3']: 
    self.object3.modify(id_to_modify, value) 

Beachten Sie, dass Flags für alle objectx gelten können. Angenommen, jedes objectx implementiert die modify-Methode korrekt (im Grunde sind die Objektinstanzen von verschiedenen Typen, die von derselben Basisklasse erben, so dass sie alle die Methode modify haben, aber zwischen diesen Objekten unterschiedlich implementiert werden können).

+0

Dies erfordert mehr Kontext. Welche Arten von Objekten sind das, was machst du mit ihnen? – Will

Antwort

1

Mit getattr können Sie beliebige Instanz zugreifen Mitglied eines Objekts:

getattr(obj, instance_attribute_name) 

Beispiel:

>>> 'a'.upper() 
'A' 
>>> getattr('a', 'upper')() 
'A' 

Statt Fahnen, wie etwa Pass Namen des Attributs zu ändern?

def modifyfunc(self, attr_names, id_to_modify, value): 
    for attr_name in attr_names: 
     getattr(self, attr_name).modify(id_to_modify, value) 

... 

obj.modifyfunc(['object1', 'object3'], 'id1', 'value1')