Listowanie metod modułu w pythonie

Aktualnie badam wydajność trzech bibliotek łączących do bazy danych w połączeniu z sqlalchemy. Są to mysql-connector, MySQLdb oraz oursql. Po przygotowaniu podstaw, zacząłem się zastanawiać, w jaki sposób dodać kolejne testy i nie przejmować się modyfikacją podstawy testów.

Znalazłem kilka rozwiązań, z czego najlepsze wykorzystywały metodę dir:

import types
import module

alchemy_tests = [module.__dict__.get(test) for test in dir(module)
                     if isinstance(module.__dict__.get(test), types.FunctionType)
                        and test.startswith('sqltest_')]

W kodzie są dwie głowne części. Pierwsza odpowiada za iterację po wynikach metody dir:

module.__dict__.get(test) for test in dir(module)

Druga jest warunkiem regulującym dodanie elementu do listy:

if isinstance(module.__dict__.get(test), types.FunctionType)
and test.startswith('sqltest_')

Warto pamiętać, że dir zwróci tylko nazwy elementów modułu, stąd użycie module.__dict__.get .

A poniżej wersja rozwinięta:

alchemy_tests = []
    for test in dir(module):
        if isinstance(module.__dict__.get(test), types.FunctionType) \
            and test.startswith('sqltest_'):
            alchemy_tests.append(module.__dict__.get(test))

Komentarze

Comments powered by Disqus