2009-05-21 31 views
29
  • 名コードは、コードは、コードが

答えて

31

はそれぞれの例です。

from inspect import stack 

class Foo: 
    def __init__(self): 
     print __file__ 
     print self.__class__.__name__ 
     print stack()[0][3] 

f = Foo() 
+2

コマンドラインから実行しようとしていますか?それは明らかに定義されていません。コードを含むファイルを作成し、python filenameを実行してみてください。期待どおりに動作します。 –

+0

ファイルから実行します – mtasic85

+2

なぜinspect.currentframeですか? – tzot

5
self.__class__.__name__ # name of class i'm in 
を実行しているメソッド(クラスの属性)の
  • 名前を実行している場所から、クラスの
  • 名前を実行している場所から残りの

    SYSおよびトレースモジュール

    http://docs.python.org/library/sys.html http://docs.python.org/library/trace.html

    いくつかの詳細情報:トレースバックモジュールはそれを扱うことができるので、 https://mail.python.org/pipermail/python-list/2001-August/096499.htmlhttp://www.dalkescientific.com/writings/diary/archive/2005/04/20/tracing_python_code.html

    は、エラー報告のためにそれをしたいんでした:ここ

    http://docs.python.org/library/traceback.html

  • 9
    import sys 
    
    class A: 
        def __init__(self): 
         print __file__ 
         print self.__class__.__name__ 
         print sys._getframe().f_code.co_name 
    
    a = A() 
    
    4

    非常に注意してください。検討:

    class A: 
        pass 
    
    B = A 
    b = B() 
    

    bの「クラス名」は何ですか。それはAかBか?どうして?

    重要なことは、知っているか気にする必要がないということです。オブジェクトはそのままです:その名前は非常にまれにしか役に立ちません。

    +4

    クラス名は 'A'です。' b'は 'B'の**インスタンス**です。**は**クラス**の' A'への**参照です。 – ted

    +0

    エンドユーザーには、確かに。デバッギング時には非常に便利です。例外ハンドラやそれに類似したレポートのように、どこにあるかを報告します。同じことを言うには素晴らしいエラーメッセージを作成することができますが、とにかくこの情報を頻繁に持ちますが、毎回入力するのは無駄に見えます。また、一般的なロギングパッケージを(例えば)ビルドするために、これを自動的に提供することは非常に便利です。引数が保持されている場合は、isinstance()にも同様に適用されませんが、これは確かに重要で有用です。 – TextGeek

    関連する問題