W dużej aplikacji pracuję, kilka osób importuje różne moduły w inny sposób, np. importu x lub z y import x skutków ubocznych to x jest importowany dwukrotnie i mogą wprowadzać błędy bardzo subtelne, czy dana osoba jest poleganie na globalnych parametrówmoduł został ponownie zaimportowany, jeśli został zaimportowany z innej ścieżki.
np Załóżmy, że mam mypakcage pakiet z trzech plików mymodule.py, main.py i init, .py
mymodule.py zawartość
l = []
class A(object): pass
zawartość 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()
drukuje
updated list [1]
lets check []
updated list [1, 1]
lets check again []
ponieważ teraz są dwie listy w dwóch różnych modułach, podobnie klasa A jest inna Dla mnie wygląda wystarczająco poważnie, ponieważ same klasy będą traktowane inaczej np. poniżej wydruków kodów Fałszywe
def create():
from mypackage import mymodule
return mymodule.A()
def check(a):
import mymodule
return isinstance(a, mymodule.A)
print check(create())
Pytanie:
Czy istnieje jakiś sposób, aby tego uniknąć? z wyjątkiem egzekwowania tego modułu powinien być importowany w jedną stronę onyl. Nie można tego obsłużyć przez mechanizm importowania Pythona, widziałem kilka błędów związanych z tym w kodzie django i gdzie indziej.
hmmm faktycznie, że nie jest to przypadek, to widzę, jak powtórzyć go main.py opakowaniu zewnętrznym –
no masz rację :) –