我想修改不同的对象。目前,我传递一个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
的标志都可以为true。假设任何objectx正确地实现了modify
方法(基本上,对象实例具有从同一基类继承的不同类型,因此它们都具有方法modify
但可以在这些对象之间以不同方式实现)。
答案 0 :(得分: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')