Come posso ottenere un riferimento a un modulo all'interno di quel modulo? Inoltre, come posso ottenere un riferimento al pacchetto contenente quel modulo?
Come posso ottenere un riferimento a un modulo all'interno di quel modulo? Inoltre, come posso ottenere un riferimento al pacchetto contenente quel modulo?
Risposte:
import sys
current_module = sys.modules[__name__]
Un'altra tecnica, che non importa il modulo sys, e probabilmente - dipende dai tuoi gusti - più semplice:
current_module = __import__(__name__)
Ricorda che non esiste importazione. Python importa ogni modulo una sola volta.
Se hai una classe in quel modulo, la __module__
proprietà della classe è il nome del modulo della classe. In questo modo è possibile accedere al modulo tramite sys.modules[klass.__module__]
. Questo funziona anche per le funzioni.
__module__
proprietà non sia un modulo, ma una stringa; quindi un inspect.getabsfile(func.__module__)
errore con " TypeError: 'os' non è un oggetto modulo, classe, metodo, funzione, traceback, frame o codice "; mentre inspect.getabsfile(sys.modules[o.__module__])
sembra passare.
Puoi ottenere il nome del modulo corrente usando __name__
Il riferimento del modulo può essere trovato nel sys.modules
dizionario.
Vedi la documentazione di Python
Puoi passarlo dall'esterno:
mymod.init(mymod)
Non ideale ma funziona per il mio caso d'uso attuale.