Структура каталогов Python для модулей - PullRequest
0 голосов
/ 25 апреля 2019

В моем текущем каталоге есть следующая структура каталогов и файлов:

├── alpha
│   ├── A.py
│   ├── B.py
│   ├── Base.py
│   ├── C.py
│   └── __init__.py
└── main.py

Каждый файл в каталоге alpha / является собственным классом, и каждый из этих классов входит в базовый класс в Base.py. Прямо сейчас я могу сделать что-то подобное в main.py:

from alpha.A import *
from alpha.B import *
from alpha.C import *

A()
B()
C()

И все работает отлично. Однако, если бы я хотел добавить файл и класс «D», а затем использовать D () в main.py, мне пришлось бы зайти в свой main.py и сделать «из alpha.D import *». Есть ли способ сделать импорт в моем главном файле, чтобы он импортировал ВСЕ в каталог alpha?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2019

зависит от того, что вы пытаетесь сделать с объектами, одним из возможных решений может быть:

import importlib
import os

for file in os.listdir("alpha"):
    if file.endswith(".py") and not file.startswith("_") and not file.startswith("Base"):
         class_name = os.path.splitext(file)[0] 
         module_name = "alpha" + '.' + class_name
         loaded_module = importlib.import_module(module_name)
         loaded_class = getattr(loaded_module, class_name)
         class_instance = loaded_class()

Импорт всего с помощью * не является хорошей практикой, поэтому, если ваши файлы имеют только один класс, импорт этого класса является «более чистым» (class_name в вашем случае)

0 голосов
/ 25 апреля 2019

Отличный вопрос!Я нашел ответ на этом SO посте после поиска в Google: "Python import весь каталог."

Надеюсь, это поможет!

...