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