In una grande applicazione che sto lavorando, diverse persone importano gli stessi moduli in modo diverso ad es. importazione x o da importazione x gli effetti collaterali y del cioè x è importata due volte e può introdurre bug molto sottile, se qualcuno è fare affidamento su attributi globalimodulo reimportato se importato da un percorso diverso
esempio supponiamo Ho un mypakcage pacchetto con tre file di mymodule.py, main.py e init .py
contenuti mymodule.py
l = []
class A(object): pass
contenuti main.py
def add(x):
from mypackage import mymodule
mymodule.l.append(x)
print "updated list",mymodule.l
def get():
import mymodule
return mymodule.l
add(1)
print "lets check",get()
add(1)
print "lets check again",get()
stampa
updated list [1]
lets check []
updated list [1, 1]
lets check again []
perché ora ci sono due liste in due moduli diversi, allo stesso modo la classe A è diversa Per me sembra abbastanza seria perché le classi stesse saranno trattate in modo diverso ad es. sotto stampe di codici falsi
def create():
from mypackage import mymodule
return mymodule.A()
def check(a):
import mymodule
return isinstance(a, mymodule.A)
print check(create())
Domanda:
C'è un modo per evitare questo? tranne che impone che il modulo debba essere importato one-way. Non può essere gestito dal meccanismo di importazione di Python, ho visto diversi bug relativi a questo nel codice django e anche altrove.
hmmm in realtà che non è il caso, vedrò come replicare con main.py pacchetto esterno –
non hai ragione :) –