Dada uma classe C em Python, como posso determinar em qual arquivo a classe foi definida? Preciso de algo que possa funcionar na classe C ou em uma instância da C.
Estou fazendo isso porque geralmente sou fã de colocar arquivos que pertencem juntos na mesma pasta. Eu quero criar uma classe que usa um modelo Django para renderizar a si mesmo como HTML. A implementação básica deve inferir o nome do arquivo para o modelo com base no nome do arquivo em que a classe está definida.
Digamos que eu coloque uma classe LocationArtifact no arquivo "base / artifacts.py", então quero que o comportamento padrão seja o nome do modelo "base / LocationArtifact.html".
python
class
introspection
Staale
fonte
fonte
Respostas:
Você pode usar o módulo inspect , assim:
fonte
getfile
usar:inspect.getmodule(C.__class__)
inspect.getfile(C)
. SeC
for uma classe, entãoC.__class__
se refere aobject
, o que gerará uma exceçãoTypeError: <module 'builtins' (built-in)> is a built-in class
. Eu acho que apenas para uma instânciac
que você deseja usarinspect.getfile(c.__class__)
.metaclass=abc.ABCMeta
), pois ela retorna em/usr/local/lib/python3.7/abc.py
vez do arquivo apropriado. A solução de @JarretHardie (abaixo) funcionou melhor.experimentar:
fonte
LocationArtifact
porobj.__class__
onde obj é uma instância de LocationArtifact.Esta é a abordagem errada para Django e realmente forçando as coisas.
O padrão típico de aplicativo Django é:
fonte