Рассмотрим некоторые простые файлы модулей (genlib.py, applib.py) и файл приложения, который их использует (app.py): -
genlib.py applib.py app.py
def A_func1 def func1 import genlib
... ... import applib
def A_func2 def func2 (a, b) = func1
... ... (m, n) = applib.func1
... (x, y) = genlib.A_func1
def B_func1 ... (a, b) = genlib.A_func3
...
def B_func2
...
В genlib.py (модуль общего пользования) префиксы 'A_' обозначают некоторую подгруппу функций; они, вероятно, будут манипулировать аналогичными типами данных, например. applib.py (модуль для конкретного приложения) включает функции, необходимые для конкретного приложения, app.py ... но applib.py также может использоваться другими программами, которые не являются app.py.
Если я захочу создать общую функцию в genlib.py с именем A_func3 (как она принадлежит к группе префиксов A_) ... и она использует функцию genlib.py 'B_func2', я выиграл невозможно разместить код в его логической позиции в файле genlib.py, так как это создаст ситуацию с проблемой «использование до определения» («NameError») в Python.
За исключением дальнейшей декомпозиции модуля на отдельные файлы, такие как genlib_A.py, genlib_B.py и т. Д., Которые all необходимо импортировать в app.py (и в определенном порядке), там Как-нибудь обойти эту проблему? Должен ли я просто физически поместить 'A_func3' после 'B_func2' и носить некрасивую организацию модуля?
Также ... А как насчет случая, когда я хочу создать свой собственный 'B_func2', например, чтобы 'заменить' 'обычно используемую' функцию в genlib.py (без изменения genlib.py ). Если я определю функцию 'B_func2' в applib.py, например, есть ли способ заставить ее использовать без необходимости обновлять все вызовы 'B_func2' в genlib.py (в этом случае я может также просто определить новую функцию в genlib.py и обновить все в модуле, чтобы использовать новую функцию в любом случае) ...? Это похоже на «локализацию» переменных внутри функции: если я определяю переменную внутри функции, имя которой совпадает с именем переменной вне функции, манипуляции с переменной внутри функции влияют только на переменную, определенную в функции - переменная вне функции не затрагивается. Можем ли мы сделать то же самое с функциями? ... или мы всегда должны обновлять код, чтобы мы заменяли вызовы 'genlib.B_func2' на 'applib.B_func2' ...?
Документация Python по модулям хороша ... но выходит за рамки того, что я хочу сделать в данный момент, пока я изучаю Python - я просто хочу иметь возможность включать модуль 'общего пользования' функции / классы / etc ... и затем некоторые специфичные для приложения модули, содержащие специфичные для приложения функции / классы / etc ... отсюда мой вопрос о том, как их организовать просто .
Я все еще начинаю понимать, что означает «глобальный» и как работают «правила определения объема» в Python.
Пока я в основном пытаюсь добиться того, чтобы все это происходило под Windows 10 при использовании Python 3.6.5.
Спасибо за любые предстоящие мысли.