Вы можете использовать словарный подход:
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)
Это предполагает, что вы используете метод экземпляра. Для статического метода / метода класса вам необходимо настроить объект, передаваемый для метода.
Я не уверен, что есть что-то элегантное, что не включает в себя предопределение кратных (или комбинаций) lists
и 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()