6

実際は2問です。1)インスタンスのクラス名を取得する一般的な方法はありますか?

class someClass(object):

文字列「someClass」を提供する組み込みの方法が欲しい

2) 関数と同様。私が持っている場合

def someFunction():
    ....
    print builtinMethodToGetFunctionNameAsString
    return

「someFunction」を出力します

私がこれを探している理由は、クラスとサブクラスのジャングルが少しあり、デバッグのために現在の場所を出力したいので、すべてのメソッドに行に沿って何かを追加したいだけです

print 'Executing %s from %s' %(getFunctionName,getClassName)

したがって、クラスと関数がどこにあるかを知っている汎用コマンドを探しているので、すべてのメソッドで行をコピーして貼り付けることができ、メソッドごとに個別の行を書く必要はありません。

4

2 に答える 2

6

__name__次の属性を使用します。

クラス:

>>> class A:pass
>>> A.__name__
'A'
>>> A().__class__.__name__       #using an instance of that class
'A'

関数:

>>> def func():
...     print func.__name__
...     
>>> func.__name__
'func'
>>> func()
func

クラスの簡単なハックは次のとおりです。

>>> import sys
>>> class A():
...     def func(self):
...         func_name = sys._getframe().f_code.co_name
...         class_name = self.__class__.__name__
...         print 'Executing {} from {}'.format(func_name, class_name)
...         
>>> A().func()
Executing func from A
于 2013-06-19T16:28:19.197 に答える
3

関数部分はすでにこの SO 投稿で回答されています。コードは次のようになります。

import sys
print sys._getframe().f_code.co_name

クラス部分には、次を使用します:A.__name__またはA().__class__.__name(インスタンスの場合)

于 2013-06-19T16:51:02.363 に答える