Как пройти через весь импорт из определенного файла в Python? - PullRequest
0 голосов
/ 24 апреля 2019

Я работаю над проектом, в котором мне нужно вызвать значения, присутствующие в переменной, из всех импортированных классов. Один из способов добиться этого - написать имена классов вручную, но я хотел знать, есть ли какой-то способ, мы можем пройти через него.

Ничего, я пытался, кажется, работает. Я пытался использовать iter_modules (), но получил AttributeError. Ниже приведен пример проблемы:

Допустим, у меня есть представления папок, в которых я определил 10 разных классов представлений в разных файлах и init .py внутри папки представлений, как показано:

from .view1 import ViewClass1
from .view2 import ViewClass2
from .view3 import ViewClass3
from .view4 import ViewClass4
.
.
.
from .view10 import ViewClass10

Теперь я в своей базовой папке, куда мне нужно позвонить во все классы просмотра, у меня есть код, как показано:

from .views import *
# Should import all the ViewClasses ie ViewClass1, ViewClass2 and so on

# I have to call the staticmethod get_view_type defined in all the classes
# One way is:
# print(ViewClass1.get_view_type())
# print(ViewClass2.get_view_type())...
# The above continues

# But I want a solution where I can loop through all the imports from the views __init__ and call the method as:
# for viewclass in [Something]:
#     print(viewclass.get_view_type())

Я хотел знать, есть ли какой-нибудь метод для достижения этой цели?

1 Ответ

2 голосов
/ 24 апреля 2019

Это кажется немного сомнительным с точки зрения дизайна, но здесь вы идете:

import views

или

from . import views

Поскольку ваш импорт кажется относительно вашего PYTHONPATH.

for name, entity in views.__dict__.items():
    if not name.startswith('__'):
        cls = entity
        print(cls.get_view_type())

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...