Mam klasę biblioteki, w zależności od tego, w jaki sposób jest ona importowana, metodę, która polega na self.__module__
dla zachowania zmian identyfikacyjnych - w zależności od tego, czy importuję ją względnie czy absolutnie. Czy istnieje sposób na wymuszenie, aby atrybut self.__name__
klasy wrócił całkowicie?Uzyskaj moduł self____ klasy niezależnie od sposobu importowania.
Zdaję sobie sprawę, że jednym z rozwiązań byłoby zmusić wszystkich do importowania podklas w ten sam sposób, ale zastanawiał się, czy istnieje sposób, aby zmusić go z punktu widzenia biblioteki.
skrócone Struktura
Mam moduł w bibliotece
project/
mylib/
foo.py
LibraryClass
def get_name(self):
return "%s.%s.%s" % \
(self.__module__, self.__class__.__name__, self.some_init_property)
prog/
utils.py
fooClass(LibraryClass)
bar.py
def some_func()
#see below
W mylib
, mam import importer wszystkie podklasy LibraryClass
poprzez ciąg classname w ustawieniach naszego projektu Django plik.
Zasadniczo obserwowane zachowanie zależy od sposobu importowania. więc istnieją dwa zachowania Obserwuję w bar.py:
def some_func_absolute():
from prog.utils import fooClass
f = fooClass("lalala")
print f.get_name()
#prints prog.utils.fooClass.lalala
Versus
def some_func_relative():
from utils import fooClass
f = fooClass("lalala")
print f.get_name()
#prints foo.fooClass.lalala
Czy próbowałeś użyć importu względnego 'from .utils import fooClass' zamiast' from utils import fooClass'? – Bakuriu
Czy masz dwa wpisy w sys.path, które prowadzą do tych modułów? Nigdy nie widziałem zachowania, które opisujesz, ale domyślam się, że masz sys.path "" lub ". to znaczy, że dostaniesz się tam raz, a drugi to pełna ścieżka. – JimP
@JimP - okazało się, że mieliśmy podwójny import na mylib/i foo/level (w naszej większej strukturze projektu) - który rozwiązał ten problem. Chciałbym dać odpowiedź na problem strukturalny, który mieliśmy. – dmyung