web-dev-qa-db-fra.com

Comment obtenir le chemin de fichier pour une classe en Python?

Étant donné une classe C en Python, comment puis-je déterminer dans quel fichier la classe a été définie? J'ai besoin de quelque chose qui peut fonctionner à partir de la classe C ou d'une instance hors C.

La raison pour laquelle je fais cela, c'est parce que je suis généralement un fan de mettre des fichiers qui appartiennent ensemble dans le même dossier. Je veux créer une classe qui utilise un modèle Django pour se rendre au format HTML. L'implémentation de base doit déduire le nom de fichier du modèle en fonction du nom de fichier dans lequel la classe est définie.

Disons que je mets une classe LocationArtifact dans le fichier "base/artifacts.py", alors je veux que le comportement par défaut soit que le nom du modèle soit "base/LocationArtifact.html".

78
Staale

Vous pouvez utiliser le module inspect , comme ceci:

import inspect
inspect.getfile(C.__class__)
106
DNS

essayer:

import sys, os
os.path.abspath(sys.modules[LocationArtifact.__module__].__file__)
27
Jarret Hardie

C'est la mauvaise approche pour Django et forcer vraiment les choses.

Le modèle d'application Django typique est:

  • / projet
    • / appname
      • models.py
      • views.py
      • / templates
        • index.html
        • etc.
5
Soviut