Come posso ottenere un riferimento a un modulo all'interno di quel modulo? Inoltre, come posso ottenere un riferimento al pacchetto che contiene quel modulo?Python: Come posso ottenere un riferimento a un modulo all'interno del modulo stesso?
risposta
import sys
current_module = sys.modules[__name__]
tranne per questo non sarà del tutto corretto se il modulo viene ricaricato; Non penso che ci sia un posto dove è garantito un riferimento, se ci fosse, ricaricare non funzionerebbe davvero, giusto? –
Il ricaricamento riutilizza lo stesso oggetto modulo; non viene creato alcun nuovo oggetto modulo, quindi è ancora corretto di fronte al nuovo caricamento. – bukzor
Se si dispone di una classe in quel modulo, quindi la proprietà della classe è il __module__
nome di modulo della classe. In questo modo è possibile accedere al modulo tramite sys.modules[klass.__module__]
. Questo funziona anche per le funzioni.
In realtà, sembra che (almeno) per una funzione, la proprietà '__module__' non sia un modulo, ma una stringa; quindi un 'inspect.getabsfile (func .__ module __)' fallisce con "_TypeError: 'os' non è un modulo, classe, metodo, funzione, traceback, frame o codice oggetto_"; mentre 'inspect.getabsfile (sys.modules [o .__ module __])' sembra passare. – sdaau
Grazie, risolto. – Michael
è possibile ottenere la nome del modulo corrente utilizzando __name__
Il riferimento del modulo può essere trovato nel dizionario sys.modules
.
Vedi Python documentation
Apprezzo il collegamento doc. –
più Una tecnica, che non importare il modulo sys, e forse - dipende dal vostro gusto - più semplice:
current_module = __import__(__name__)
Essere consapevoli del fatto non v'è alcuna importazione. Python importa ogni modulo solo una volta.
Questo sembra un modo davvero carino per evitare di importare sys. Oltre ad essere un po 'contro-intuitivo da leggere ci sono dei potenziali svantaggi di questo approccio? – JeremyDouglass
@JeremyDouglass. Non che io sappia. __import__ è una funzione built-in legittima, documentata (l'unica funzione __xx__). Puoi sostituirlo con il pacchetto 'importlib' (dovrai importarlo). Forse - non mi è mai successo - potresti avere un problema con l'importazione relativa/assoluta, se un modulo con lo stesso nome è disponibile in sys.path, nel qual caso puoi risolverlo con l'argomento 'livello' della funzione. – Uri
È possibile passare in dall'esterno:
mymod.init(mymod)
Non è l'ideale ma funziona per il mio attuale caso d'uso.
- 1. In Python, come posso accedere allo spazio dei nomi del modulo principale da un modulo importato?
- 2. Come fare riferimento a file locali in un modulo npm?
- 3. Come posso impedire a un modulo Python di importare se stesso?
- 4. Come per ottenere un riferimento agli attributi di modulo corrente in Python
- 5. Come posso ottenere il riferimento al modulo modale attualmente attivo?
- 6. Invio a un modulo web utilizzando python
- 7. Come accedere a un modulo di libreria standard in Python quando esiste un modulo locale con lo stesso nome?
- 8. rimuovere un modulo python importata
- 9. layout del modulo python
- 10. scaricare un modulo in Python
- 11. Python: ottenendo un riferimento a una funzione dall'interno stesso
- 12. Come ottenere il caricamento del file senza un modulo
- 13. Provare a importare il modulo con lo stesso nome di un modulo incorporato causa un errore di importazione
- 14. Come fare riferimento a un tipo in un modulo che ha un tipo con lo stesso nome del modulo in cui si trova?
- 15. Come estendere un modulo Python? (python-twitter)
- 16. Riferimento alla variabile globale da un modulo
- 17. Creazione di un modulo python
- 18. Funzione modulo stub chiamata dallo stesso modulo
- 19. Attributi del modulo Python `this`
- 20. Importazione dinamica del modulo Python
- 21. Come posso elencare i metodi in un modulo Python 2.5?
- 22. Come ottenere il nome file del modulo __main__ in Python?
- 23. Come posso importare un modulo di terze parti in Python?
- 24. Come modificare una variabile del modulo da un altro modulo?
- 25. Come posso ispezionare un modulo Perl 6?
- 26. presentando un rotaie del modulo a un URL "amichevole"
- 27. Aggiunta di un elemento modulo personalizzato a un modulo Adminhtml
- 28. Costruire un modulo python e collegarlo a un framework MacOSX
- 29. Ottenere un riferimento a un modulo di finestra di dialogo (ShowMessage, MsgDialog, ecc.)
- 30. Come posso dichiarare e utilizzare un modulo Perl 6 nello stesso file del programma?
Sospetto che stiate facendo questa domanda perché avete una variabile in ** scope del modulo ** (es. BLAH = 10 al di fuori di una funzione o classe), quindi una ** variabile di classe/funzione ** chiamata BLAH, e vuoi differenziare. Una domanda valida qui è: ** È necessario? ** Le regole dell'ambito sono notoriamente soggette a errori, soprattutto da parte dell'idiota che preleva il tuo codice dopo di te (cioè sei mesi dopo). Trucchi come questo sono raramente necessari; Cerco di evitarli completamente perché sono così spesso confusi e modificati in modo errato in seguito. –
@ KevinJ.Rice "l''idiota' che prende il tuo codice dopo di te (cioè tu, 6 mesi dopo)" ha reso la mia giornata! – arctelix
A chi importa perché sta facendo la domanda? Ci sono molti validi motivi per cui è necessario farlo. –