2014-10-21 2 views
0

Я импортирую переменное количество модулей, которые все должны предлагать те же функции (func1, func2, func3(n)).Проверьте, не требуют ли модули требуемых функций.

Я знаю имена всех модулей и нужно проверить, что все они - по крайней мере, предложить функцию, без выполнения их (например не что-то вроде try something = mod1.func1 except NotWorking: print("nope")) или разбор всего модуля на наличие «def func1:».

Как я могу проверить, что эти модули предлагают указанные функции?

ответ

1

Модули - это объекты, а методы - только атрибуты этих объектов. Вы можете использовать обычные getattr и hasattr функции:

hasattr(mod1, "func1") 

Но это звучит как-то странно, чтобы делать вещи. Вероятно, лучше было бы использовать класс с надлежащим механизмом наследования, чтобы суперкласс определял интерфейс, объявляя абстрактные методы (которые могут ничего не делать, кроме повышения NotImplementedError), и подклассы реализуют этот интерфейс.

+0

большое спасибо за ответ! Я никогда не использовал наследование/суперклассы - я думаю, мне нужно изучить это ... звучит разумно! –

Смежные вопросы