Jak uzyskać odwołanie do modułu z tego modułu? Jak mogę również uzyskać odniesienie do pakietu zawierającego ten moduł?
Jak uzyskać odwołanie do modułu z tego modułu? Jak mogę również uzyskać odniesienie do pakietu zawierającego ten moduł?
Odpowiedzi:
import sys
current_module = sys.modules[__name__]
Jeszcze jedna technika, która nie importuje modułu sys i prawdopodobnie - zależy od twojego gustu - prostsza:
current_module = __import__(__name__)
Pamiętaj, że nie ma importu. Python importuje każdy moduł tylko raz.
Jeśli masz klasę w tym module, wówczas __module__
właściwością klasy jest nazwa modułu klasy. W ten sposób możesz uzyskać dostęp do modułu za pośrednictwem sys.modules[klass.__module__]
. Działa to również w przypadku funkcji.
__module__
właściwość nie jest modułem, ale ciągiem znaków; dlatego błąd inspect.getabsfile(func.__module__)
kończy się błędem „ TypeError: 'os' nie jest modułem, klasą, metodą, funkcją, elementem śledzenia, ramką ani obiektem kodu ”; podczas gdy inspect.getabsfile(sys.modules[o.__module__])
wydaje się minąć.
Możesz uzyskać nazwę bieżącego modułu za pomocą __name__
Opis modułu można znaleźć w sys.modules
słowniku.
Zobacz dokumentację Pythona
Możesz przekazać go z zewnątrz:
mymod.init(mymod)
Nie jest to idealne rozwiązanie, ale działa w moim obecnym przypadku użycia.