Существует много сообщений, в которых я должен использовать случай __init__.py
, и одним из них является определение глобальной переменной.
Но я хочу знать, есть ли недостатки в определении локальной переменной в __init__.py
?Определение любой переменной в __init__.py
ответ
Использование глобальных переменных имеет свои проблемы в целом:
Передача переменных в качестве параметров функций, например, более гибкими и читаемыми, чем доступ к глобальным функциям доступа.
В случае сети подключенных объектов, как правило, более гибко для объектов иметь членов, ссылающихся на другие объекты, а затем для доступа к другим объектам с использованием глобальных переменных.
Наличие классов экспорта модулей, а не экземпляров, позволяет иметь несколько экземпляров класса, а не одного.
Сказав это, это мой опыт в том, что в программировании нет догм. Хорошо известная лемма в дизайне алгоритмов заключается в том, что из каждого ресурса (вещи в вашей программе) может быть ноль, один или бесконечно много. Если вы обычно можете иметь только один экземпляр объекта и он не меняет идентификатор, то экспортировать экземпляр из модуля (так что он определяет его в модулях __init__.py) в порядке.
Это просто, что в начале дизайна вы иногда предполагаете, что определенный ресурс уникален, но позже выясняется, что у вас будет несколько.
Типичное применение экспорта переменной, а не типа, когда оно фактически является константой. Хорошим примером этого является math.pi, который не имеет тенденций к изменению очень часто ...
Обратите внимание, что поскольку в Python все является объектом, слова «переменная» и «экземпляр» здесь используются здесь взаимозаменяемо. Кроме того, функции и классы (как правило, одиночные) объекты в своем собственном праве находятся в Python.
Нет технической причины, которая предотвращает использование __init__.py для объявления глобальных переменных.
Тем не менее, среднее значение модулей __init__.py заключается в определении структуры импорта вашего приложения. Из документации Python:
Файлы __init__.py необходимы, чтобы Python рассматривал каталоги как содержащие пакеты; это делается для предотвращения каталогов с общим именем, например строки, из непреднамеренного скрытия допустимых модулей, которые появляются позже на пути поиска модуля. В простейшем случае __init__.py может быть просто пустым файлом, но он также может выполнять код инициализации для пакета или задавать переменную __all__, описанную ниже.
Как разработчик, я ожидаю найти в файле __init__.py макет импорта самого приложения. Это последнее место, которое я ищу, когда я изучаю исходный код.
Таким образом, скрыть вашу реализацию в __init__.py вводит в заблуждение. Это особенно верно в отношении глобальной переменной, которой жизненный цикл по определению трудно следовать.
Это считается плохой практикой, потому что нарушает читаемость кода, что является одним из руководящих принципов Python.
import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
...
Readability counts.
...
- 1. using __init__.py
- 2. Как изменилось __init__.py?
- 3. Ошибка импорта __init__.py
- 4. Невозможно использовать __init__.py
- 5. ImportError __init__.py, колба
- 6. Ошибка Sklearn __init__.py
- 7. Как я могу отладить значение переменной в __init__.py
- 8. Импорт переменной из корня __init__.py в пакете Python
- 9. Python: печать переменной, объявленной в __init__.py после импорта класса
- 10. Пробный патч с __init__.py
- 11. Метод импорта из __init__.py
- 12. Ошибка Tweepy: Нет __init__.py
- 13. __init__.py и импортные зависимости
- 14. импорт Python с __init__.py
- 15. __import__ импортирует только __init__.py
- 16. Простая миграция на __init__.py
- 17. Python упаковки - что __init__.py
- 18. (Python) Создание пакетов __init__.py
- 19. Python __init__.py и классы
- 20. Удаляется __pycache__ и __init__.py
- 21. __import __() вызывает __init__.py дважды?
- 22. В чем разница между __init__.py и __main__.py?
- 23. API пакета в python. В __init__.py?
- 24. Как запустить код в __init__.py
- 25. Импорт из __init__.py в файле
- 26. инициализация модуля yaml в __init__.py
- 27. Импорт переменных, указанных в __init__.py
- 28. Передача параметров в колбу __init__.py
- 29. __init__.py требуется для pkgutil.walk_packages в python3?
- 30. Когда код в __init__.py запускается?
Что вы подразумеваете под «определением ** локальной ** переменной в' __init __. Py' "? –