使用对象列表执行方法列表

时间:2017-02-08 15:51:27

标签: python class jython

我有一个同一个类的对象列表,想要逐个执行方法列表。

F.e。

objectlist = [ obj1, obj2, obj3, ...]
methodlist = [ obj(?).returnstring(para1), obj(?).returnint(para2,subpara1), ...]

for i in range(len(objectlist)):
    for n in range(len(methodlist)):
        value = obj[i].methodlist[n]
        print(value)

我只是有这个肮脏的解决方法:

objectlist = [ obj1, obj2, obj3, ...]
i = 0
methodlist = [ objectlist[i].returnstring(para1), objectlist[i].returnint(para2,subpara1), ...]

for i in range(len(objectlist)):
    for n in range(len(methodlist)):
        value = obj[i].methodlist[n]
        print(value)

嗯......它有效,但我对此解决方案感到肚子痛。

有更好的方法吗?

映入眼帘,

使...非常吃惊

2 个答案:

答案 0 :(得分:2)

您的解决方法工作,它只会调用第一个元素。自i = 0起,它会立即评估

您可以使用 lambda-expressions

objectlist = [ obj1, obj2, obj3, ...]
methodlist = [lambda obj:obj.returnstring(para1), lambda obj:obj.returnint(para2,subpara1), ...]

所以这里methodlist包含一个表格的lambda表达式列表:

lambda obj:obj.returnstring(para1)

lambda表达式是匿名函数,它将参数obj作为输入,并在该对象上返回obj.returnstring(para1)。因此,它或多或少等同于:

def afunction(obj):
    return obj.returnstring(para1)

现在,您可以简单地遍历对象和方法列表,并使用参数调用lambda表达式并对结果执行某些操作。像:

for i in range(len(objectlist)):
    for n in range(len(methodlist)):
        value = methodlist[n](obj[i])
        print(value)

但更优雅的是立即循环遍历您的元素,如:

for obji in objectlist:
    for methn in methodlist:
        value = methn(obji)
        print(value)

答案 1 :(得分:0)

有点脏,但仍然不是很好

objectlist = [ obj1, obj2, obj3, ...]
i = 0

for m_obj in objectlist:
    i=i+1
    methodlist = [ objectlist[i].returnstring(para1), objectlist[i].returnint(para2,subpara1), ...]

    for m_method in methodlist:
        value = m_obj.m_method()
        print(value)

这使用了python" nice"循环功能,并为每个对象重新定义你的方法(这里不需要,因为所有的obji属于同一类;但仍然是良好的实践)