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 回答