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的命名属性的值。名称必须是字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如,getattr(x, 'foobar')等价于x.foobar

于 2013-05-08T10:17:09.223 回答