W Pythonie 2.5, mam następujący kod w module o nazwie modtest.py:W jaki sposób uzyskać nazwę modułu definicji klasy obiektu zamiast nazwy modułu procesu tworzenia obiektu?
def print_method_module(method):
def printer(self):
print self.__module__
return method(self)
return printer
class ModTest():
@print_method_module
def testmethod(self):
pass
if __name__ == "__main__":
ModTest().testmethod()
Jednak gdy uruchamiam to, że wypisuje:
__main__
Jeśli utworzyć drugi plik nazywa modtest2.py i uruchom go:
import modtest
if __name__ == "__main__":
modtest.ModTest().testmethod()
ten wypisuje:
modtest
Jak zmienić dekorator, aby zawsze drukować modtest
, nazwę modułu, w którym zdefiniowano klasę?
To jest dobra odpowiedź. Czy jest możliwe, aby uzyskać pełną ścieżkę modułu zwróconą przez self .__ moduł__ zamiast tylko nazwę pliku modułu? –
Nie jestem pewien, czy możesz to zrobić dokładnie z łatwością. Możesz to przybliżyć, podchodząc do drzewa katalogów (zaczynając od katalogu '__file__') i szukając w każdym z nich plików o nazwie' __init __. Py', zatrzymując się, gdy go nie znajdziesz, a następnie łącząc segmenty ścieżek z kropki. Spodziewałbym się, że w niektórych przypadkach różni się to od prawdziwej ścieżki pełnego modułu. –
Ta metoda może działać, ale w przypadku dwóch modułów python o nieznanej relacji możliwe jest uzyskanie katalogu pliku? –