Python 如何对多个具有相似名称和相同类型的对象调用方法?

Python 如何对多个具有相似名称和相同类型的对象调用方法?,python,object,simplify,repeat,Python,Object,Simplify,Repeat,我该如何简化这段代码,最好是将它放在一个循环或一行中 object1.callMethod() object2.callMethod() object3.callMethod() difObject1.callDifMethod() difObject2.callDifMethod() difObject3.callDifMethod() 我知道我可以将对象放在一个列表中,并在其中进行迭代,但是,这仍然需要两个单独的循环和两个单独的列表。有没有办法让我列出[1,2,3

我该如何简化这段代码,最好是将它放在一个循环或一行中

object1.callMethod()  
object2.callMethod()  
object3.callMethod()  

difObject1.callDifMethod()  
difObject2.callDifMethod()  
difObject3.callDifMethod()  

我知道我可以将对象放在一个列表中,并在其中进行迭代,但是,这仍然需要两个单独的循环和两个单独的列表。有没有办法让我列出[1,2,3]的单数列表,并用它来区分每种类型的三个不同对象,因为数字也在对象名称中?

您可以使用
eval
功能:

>>> for i in range(1,4):
>>>     eval("object%d" % i).callMethod()
>>>     eval("difObject%d" % i).callDifMethod()
如果所有方法和对象名称通常都是语义的,那么可以使用
getattr
基于字符串变量引用该方法,然后使用()调用它

如果要并行运行对象/方法,请使用
zip

objects = [object1, object2, object3]
methods = ['method1name', 'method2name', 'method3name']
for object, method in zip(objects, methods):
    getattr(object, method)()

您可以使用字典方法:

methods = {cls1.method1: [cls1_obj1, cls1_obj2, cls1_obj3],
           cls1.method2: [cls1_obj4, cls1_obj5, cls1_obj6],
           cls2.method1: [cls2_obj1, cls2_obj2}

for method, objs in methods.items():
    for obj in objs:
        method(obj)
但这假设您使用的是实例方法。对于静态/类方法,需要调整为该方法传递的对象

我不确定是否有任何优雅的东西不涉及预定义
列表
dicts
的倍数(或组合)并在其上循环,因为您需要明确哪个对象运行哪个方法,所以无论哪种方式都需要定义


理想情况下,如果您有同一类的多个类似对象,您可以选择在一个列表中实例化它们:

# Instead of this
object1 = Foo(1)
object2 = Foo(2)
object3 = Foo(3)
...

# do this
foos = [Foo(i) for i in range(3)]

# Or this
bars = {name: Bar(name) for name in list_of_names}
然后,在小组中操纵它们就变得微不足道了:

for foo in foos:
    foo.foo_method()

for bar in bars.values():
    bar.bar_method()
虽然仍然很容易单独引用对象:

foo[index].foo_method()
bar[key].bar_method()

有很多方法可以完成你想做的事情,但是你能展示这些类/函数的真实代码吗?这将有助于提供有用的答案。这是我正在寻找的唯一简化方式——如果这是可行的,这就是我所需要的。如果我把这些类和函数的所有代码都放在这里,它将有数百行
for foo in foos:
    foo.foo_method()

for bar in bars.values():
    bar.bar_method()
foo[index].foo_method()
bar[key].bar_method()