Как правильно создать маппер генератором словаря?

У меня есть набор классов с необходимыми методами. Примеры классов ниже.

class FirstClass:
    
    def check_method_1(self):
        return 'check_1'
     
    
    def check_method_2(self):
        return 'check_2'


class SecondClass:
    
    def check_method_3(self):
        return 'check_3'

   
    def check_method_4(self):
        return 'check_4'


class ThirdClass:


    def check_method_5(self):
        return 'check_5'


    def check_method_6(self):
        return 'check_6'

На их основании хочу сделать маппинг имен методов и самих функций:

mapper = {'check_method_1': FirstClass.check_method_1, 'check_method_4': SecondClass.check_method_4, ...}

Я могу это все вручную сделать, но хочу генератором словаря с этим справиться. Что-то типа такого:

classes = FirstClass, SecondClass, ThirdClass
mapper = {str(method_name):cls.method_name for cls in classes}

Как можно это сделать?


Ответы (2 шт):

Автор решения: Danis

попробуйте так:

classes = FirstClass, SecondClass, ThirdClass
classes = sum([[i, i] for i in classes], [])
mapper = {f"check_method_{i}": getattr(class_, f"check_method_{i}") for class_, i in zip(classes, range(1, 7))}

либо так

classes = FirstClass, SecondClass, ThirdClass
classes = sum([[i, i] for i in classes], [])
methods = "check_method_1", "check_method_2", "check_method_3", "check_method_4", "check_method_5", "check_method_6"
mapper = {method: getattr(class_, method) for method in zip(classes, methods)}
→ Ссылка
Автор решения: Хачатур Саркисян

@Danis, ваше решение натолкнуло на такую мысль и я решил проблему. Получилось весьма лаконично:

result = {k: v for c in classes for k, v in c.__dict__.items() if not k.startswith('__')}
→ Ссылка