Como posso obter uma referência a um módulo nesse módulo? Além disso, como posso obter uma referência ao pacote que contém esse módulo?
Como posso obter uma referência a um módulo nesse módulo? Além disso, como posso obter uma referência ao pacote que contém esse módulo?
Respostas:
import sys
current_module = sys.modules[__name__]
Mais uma técnica, que não importa o módulo sys, e sem dúvida - depende do seu gosto - mais simples:
current_module = __import__(__name__)
Esteja ciente de que não há importação. Python importa cada módulo apenas uma vez.
Se você tem uma classe nesse módulo, a __module__
propriedade da classe é o nome do módulo da classe. Assim, você pode acessar o módulo via sys.modules[klass.__module__]
. Isso também funciona para funções.
__module__
propriedade não é um módulo, mas uma string; portanto, uma inspect.getabsfile(func.__module__)
falha com " TypeError: 'os' não é um objeto de módulo, classe, método, função, rastreamento, quadro ou código "; enquanto inspect.getabsfile(sys.modules[o.__module__])
parece passar.
Você pode obter o nome do módulo atual usando __name__
A referência do módulo pode ser encontrada no sys.modules
dicionário.
Veja a documentação do Python
Você pode passá-lo de fora:
mymod.init(mymod)
Não é o ideal, mas funciona para o meu caso de uso atual.