Шридхар, предложенный вами метод очень похож на тот, который используется в модуле unittest.
Например, вот как unittest.TestLoader находит имена всех методов тестирования, которые нужно запустить (поднято из /usr/lib/python2.6/unittest.py):
def getTestCaseNames(self, testCaseClass):
"""Return a sorted sequence of method names found within testCaseClass
"""
def isTestMethod(attrname, testCaseClass=testCaseClass, prefix=self.testMethodPrefix):
return attrname.startswith(prefix) and hasattr(getattr(testCaseClass, attrname), '__call__')
testFnNames = filter(isTestMethod, dir(testCaseClass))
if self.sortTestMethodsUsing:
testFnNames.sort(key=_CmpToKey(self.sortTestMethodsUsing))
return testFnNames
Как и ваше предложение, unittest использует dir
для отображения всех атрибутов
testCaseClass
, и фильтрует список тех, чье имя начинается с prefix
(в другом месте оно равно 'test'
).
Я предлагаю несколько незначительных изменений:
Если вы поместите функции в MYmodule.py, тогда (конечно) оператор импорта должен быть
import MYmodule
Используйте getattr
вместо .__dict__.get
. Он не только короче, но и продолжает работать, если вы подкласс Mymodule. Возможно, в данный момент это не является вашим намерением, но, в любом случае, использование getattr
, вероятно, является хорошей привычкой по умолчанию.
for funcs in dir(MYmodule.Mymodule):
if funcs.startswith('MY'):
result=getattr(MYmodule.Mymodule,funcs)(dataStructure)