Importación file2
en file1.py
hace que los (es decir, nivel de módulo) nombres globales encuadernados en file2
disponibles a siguiente código en file1
- el único nombre es SomeClass
. Hace no haga lo contrario: los nombres definidos en file1
no están disponibles para codificar en file2
cuando file1
importan file2
.Este sería el caso incluso si importó de la manera correcta (import file2
, como @nate recomienda correctamente) en lugar de hacerlo de la manera horrible y horrible que lo está haciendo (si todos bajo el Sol olvidaran la existencia del constructo from ... import *
, vida Sería así que mucho mejor para todos).
parecer que quieren hacer nombres globales definidos en file1
disponible para el código en file2
y viceversa. Esto se conoce como una "dependencia cíclica" y es una idea terrible (en Python, o en cualquier otro lugar para el caso).
Así, en lugar de mostrar que las increíblemente frágiles, a menudo imposible de mantener los cortes para lograr (algo parecido a) una dependencia cíclica en Python, Prefiero discutir la excelente forma en que muchos en los que se puede evitar dicha estructura terribles .
Por ejemplo, usted podría poner nombres globales que deben estar a disposición de los dos módulos en un tercer módulo (por ejemplo file3.py
, para continuar su racha de nombres ;-) e importación que el tercer módulo en cada uno de los otros dos (import file3
tanto en file1
y file2
, y luego utilice file3.foo
etc, es decir, nombres cualificados, con el fin de tener acceso o el establecimiento de esos nombres globales de uno o ambos de los otros módulos, no barenames).
Por supuesto, cada vez más específica ayuda se podrían ofrecer si clarificada (mediante la edición de su Q) exactamente qué cree que necesita una dependencia cíclica (sólo una predicción fácil: no importa lo que le hace pensar que necesita una dependencia cíclica, estás equivocado ;-).
Por cierto, como principio general, no se recomienda hacer 'from module import *' porque dificulta ver de dónde proviene una variable importada. Además, no finalice sus declaraciones con punto y coma en Python. –
También hace imposible que un linter detecte si está usando un identificador no definido – matiascelasco