2016-07-04 3 views
1

Я хочу изменить различные объекты. На данный момент я передаю параметр flags, чтобы решить, выполнять ли изменения или нет. Есть ли способ сделать эту работу без передачи каких-либо флагов или это лучший способ сделать это? Я не чувствую, что это масштабируемое решение, когда у меня больше экземпляров объектов.Изменение различных объектов без проверки флажков

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) 

Обратите внимание, что флаги могут быть верны для любого objectx. Предположим, что любой объект x правильно реализует метод modify (в основном экземпляры объекта имеют разные типы, которые наследуются от одного и того же базового класса, поэтому все они имеют метод modify, но могут быть реализованы по-разному между этими объектами).

+0

Этого требует больше контекста. Какими объектами они являются, что вы с ними делаете? – Will

ответ

1

Использование getattr, вы можете получить доступ к произвольному члену экземпляра объекта:

getattr(obj, instance_attribute_name) 

Пример:

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

Вместо флагов, как об именах проходных атрибута изменить?

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') 

 Смежные вопросы

  • Нет связанных вопросов^_^