Как мне получить путь к файлу для класса в Python? - PullRequest
76 голосов
/ 30 марта 2009

Учитывая класс C в Python, как я могу определить, в каком файле был определен класс? Мне нужно что-то, что может работать либо из класса C, либо из экземпляра из C.

Причина, по которой я это делаю, в том, что я, как правило, поклонник, помещающий файлы, которые принадлежат друг другу, в одну папку. Я хочу создать класс, который использует шаблон Django для отображения себя в виде HTML. Базовая реализация должна определять имя файла для шаблона на основе имени файла, в котором определен класс.

Скажем, я поместил класс LocationArtifact в файл "base / artifacts.py", затем я хочу, чтобы по умолчанию использовалось имя шаблона "base / LocationArtifact.html".

Ответы [ 3 ]

101 голосов
/ 30 марта 2009

Вы можете использовать модуль inspect , например:

import inspect
inspect.getfile(C.__class__)
26 голосов
/ 30 марта 2009

попробовать:

import sys, os
os.path.abspath(sys.modules[LocationArtifact.__module__].__file__)
4 голосов
/ 30 марта 2009

Это неправильный подход для Джанго и действительно насильственных действий.

Типичный шаблон приложения Django:

  • / Проект
    • / имя_приложения
      • models.py
      • views.py
      • / шаблоны
        • index.html
        • и т.д.
...