web-dev-qa-db-ja.com

Pythonでクラスのファイルパスを取得するにはどうすればよいですか?

PythonでクラスCが与えられた場合、どのファイルでクラスが定義されているかをどのように判断できますか?クラスCまたはCのインスタンスから機能するものが必要です。

私がこれをしている理由は、私が一般的に同じフォルダに一緒に属するファイルを置くことを好むからです。 Djangoテンプレートを使用して自身をHTMLとしてレンダリングするクラスを作成します。基本実装は、クラスが定義されているファイル名に基づいてテンプレートのファイル名を推測する必要があります。

ファイル「base/artifacts.py」にLocationArtifactクラスを配置した場合、テンプレート名が「base/LocationArtifact.html」になるようにデフォルトの動作を設定します。

78
Staale

次のように inspect モジュールを使用できます。

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

試してください:

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

これはDjangoに対する間違ったアプローチであり、本当に強制的なものです。

典型的なDjangoアプリパターンは:

  • / project
    • / appname
      • models.py
      • views.py
      • / templates
        • index.html
        • 等.
5
Soviut