2016-07-04 10 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でもフラグをtrueにすることができます。任意のオブジェクト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') 
関連する問題