1

私はクラスを持っています:

class HolderClass(object):

    def __init__(self, list_of_objs):
        self.my_objects = list_of_objs

    def do_stuff(self):
        for item in self.my_objects:
            print item.a

    #more methods like this...

リスト内のオブジェクトはself.my_objects、単一のクラスによって定義されます。このクラスにはいくつかのインスタンス変数があります。私がやりたいのは、コードの重複を避けながら、別のインスタンス変数を指定してまったく同じ計算を実行できるようにすることです。

したがって、次のような別のメソッドを書く代わりに:

    def do_stuff_on_b(self):
        for item in self.my_objects:
            print item.b

メソッドを再利用できるようにしたいのですdo_stuffが、別のインスタンス変数を指定します。これを実装するエレガントな方法はありますか?

4

1 に答える 1

4

もちろん、属性の名前を渡してから、getattr()関数を使用して個々のインスタンスから取得します。

def do_stuff(self, attr):
    for item in self._my_objects:
        print getattr(item, attr)

でこれを呼び出すと、リストされているすべてのアイテムself.do_stuff('b')b属性が出力されますself.my_objects

関数のドキュメントから:

objectの指定された属性の値を返します。nameは文字列でなければなりません。文字列がオブジェクトの属性の 1 つの名前である場合、結果はその属性の値になります。たとえば、getattr(x, 'foobar')は と同等x.foobarです。

于 2013-05-08T10:17:09.223 に答える