2009-03-30 5 views
58

PythonでクラスCを指定すると、クラスが定義されたファイルをどのように判断できますか?私はクラスCから、またはCのインスタンスから働くことができるものが必要です。Pythonでクラスのファイルパスを取得するにはどうすればよいですか?

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

クラスLocationArtifactをファイル "base/artifacts.py"に入れて、テンプレート名が "base/LocationArtifact.html"であることを確認します。

+0

重複:http://stackoverflow.com/questions/269795/how-do-i -find-the-python-module-sourcesの場所、http://stackoverflow.com/questions/602846/how-can-i-access-the-current-executing-module-or-class-name-in -python –

+0

あなたはあなたがfを探しているモジュールを知っていると仮定します私はクラスからの実装で作業するので、モジュール文字列を取得します。 – Staale

答えて

82

あなたはこのように、inspectモジュールを使用することができます。

import inspect 
inspect.getfile(C.__class__) 
+3

これはクラスでは動作しますが、インスタンスでは動作しないと思います。 inspect.getfile(c .__ class__)は動作します.cはCのインスタンスです。 –

+0

あなたは正しいです。私はクラスでそれを使ったことがあり、インスタンスのためにはうまくいくと仮定しただけです。ありがとう! – DNS

+0

'' getfile'の代わりに '' inspect.getmodule(C .__ class __) '' – AJP

24

試してみてください。

import sys, os 
os.path.abspath(sys.modules[LocationArtifact.__module__].__file__) 
5

これは、Djangoのための間違ったアプローチであると本当に物事を強制します。

典型的なDjangoアプリケーションパターンである:

  • /プロジェクト
    • /APPNAME
      • models.py
      • views.py
      • /テンプレート
        • などのindex.html
+0

+1:Djangoが自然に行うことと人生ははるかに単純です。 –

+0

合意。 Djangoは「マジック」が最も少ないフレームワークの1つですが、テンプレート、テンプレートタグ、アプリはパターンの一部としていくつかの期待を持っています。あなたが不器用なクラス推論をしなければならないなら、おそらく間違った方向に行きます。 – Soviut

関連する問題