En una gran aplicación en la que estoy trabajando, varias personas importan los mismos módulos de manera diferente, p. importación x o de importación x los efectos secundarios Y de que es X ha sido importada dos veces y puede introducir errores muy sutiles, si alguien está confiando en atributos globalesmódulo reimportado si se importó de una ruta diferente
por ejemplo, supongamos que tengo un paquete con tres mypakcage mymodule.py archivo, main.py y init .py
contenidos mymodule.py
l = []
class A(object): pass
contenidos 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()
imprime
updated list [1]
lets check []
updated list [1, 1]
lets check again []
porque ahora hay dos listas en dos módulos diferentes, de manera similar, la clase A es diferente Para mí, parece lo suficientemente grave porque las clases se tratarán de manera diferente p. a continuación código imprime falsos
def create():
from mypackage import mymodule
return mymodule.A()
def check(a):
import mymodule
return isinstance(a, mymodule.A)
print check(create())
Pregunta:
¿Hay alguna manera de evitar esto? excepto la aplicación de ese módulo debe importarse one-way onyl. ¿No puede ser manejado por el mecanismo de importación de Python, he visto varios errores relacionados con esto en el código django y en otros lugares también.
hmmm realidad que no es el caso, voy a ver cómo replicar con main.py paquete exterior –
no tiene razón :) –