减少代码复制类设计

时间:2013-05-08 10:11:36

标签: python oop

我有一个班级:

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方法,但指定不同的实例变量。有没有一种优雅的方式来实现这个?

1 个答案:

答案 0 :(得分:4)

当然,传递属性的名称,然后使用getattr() function从各个实例中获取它:

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