Есть ли способ заставить __init__.py вести себя точно так же, как другой файл в python? - PullRequest
0 голосов
/ 22 марта 2020

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

test /
| -test.py
| -lib /
.. | -lib.py
. . | -__ init__.py

и я импортировал содержимое lib в __init__ следующим образом

# __init__.py
from .lib import *

содержимое lib.py и test.py, как показано ниже:

# lib.py
a = 10
def foo():
    print(a)
# test.py
import lib
lib.a = 20
lib.foo()
# prints 10

при запуске test.py будет напечатано 10, что является начальным значением.
, но если я импортирую lib в test.py, как это import lib.lib, будет напечатано 20. Так что мне было интересно если есть способ заставить __init__ вести себя точно так же, как lib.py?

РЕДАКТИРОВАТЬ: я использовал держатели переменных (если я не ошибаюсь), что означает, что я создал несколько классов (без метода инициализации), которые я просто держал переменные, которые хотел изменить, и мне не нужно было перемещать содержимое lib.py в __init__.py. но для использования в будущем это лучший выбор.

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

Если это то, что вы хотите, то просто поместите то, что в lib.py, в __init__.py (и избавьтесь от lib.py).

#__init__.py
a = 10
def foo():
    print(a)
>>> import lib
>>> lib.a = 20
>>> lib.foo()
20
0 голосов
/ 22 марта 2020

lib.a = 10 просто создает переменную a в lib.

Вместо этого вы намеревались установить переменную lib.lib.a = 20, например:

import lib
lib.lib.a = 20
lib.foo()
# prints 20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...