Как правильно создать маппер генератором словаря?
У меня есть набор классов с необходимыми методами. Примеры классов ниже.
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('__')}