импортировать все классы в файле Python с помощью цикла for - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь использовать цикл for для импорта классов, определенных в файле Python.

Допустим, у нас есть такая структура файла:

data
  -- data_sql
         -- __init__.py
         -- sqlFuncs.py
  -- data_web
         -- __init__.py
         -- webFuncs.py

и в sqlFuncs.py Я определил несколько классов:

class sqlFuncBase:
      blabla
class sqlFuncChild1 (sqlFuncBase):
      blabla
class sqlFuncChild2 (sqlFuncBase):
      blabla

Я знал, что если я хочу импортировать один единственный класс, определенный в sqlFuncs.py, я мог бы использовать from data.data_sql.sqlFuncs import sqlFuncBase as sqlBase.

Теперь я хочуимпортировать все определенные классы в sqlFuncs.py.Мне удалось получить все классы, определенные в sqlFuncs.py с помощью

    import data.data_sql.sqlFuncs
    mycls_lst = []
    for mcls in inspect.getmembers(data.data_sql.sqlFuncs, inspect.isclass) :
        if mcls[1].__module__ and mcls[1].__module__ == 'data.data_sql.sqlFuncs' :
            mycls_lst.append(mcls[1])

. После этого mycls_lst - это список классов, тип которых равен abc.ABCMeta a, и если вы проверяете эти элементы, например, с помощьюmycls_lst[0].__name__, на самом деле это строка с именем этого класса: 'sqlFuncBase' (Примечание: в этой строке нет префикса пакета 'data.data_sql.sqlFuncs'). Однако , если я захочу за цикл этого списка импортировать каждый класс:

for mcls in mycls_lst :
    from data.data_sqlFuncs import mcls as curr_cls
        # do something of this imported class

Я получу ошибки: ModuleNotFoundError: No module named 'mcls'

Итак, мой вопросэто как за-цикл импортировать все самостоятельно определенные классы в файле Python?

Спасибо !!

...