2013-06-19 66 views
6

实际上是2个问题。 1)是否有一个通用的方法来得到一个实例的类名,所以如果我有一个类获取对象名称和函数名称

class someClass(object): 

我想一个内置的方式,给了我一个字符串“SomeClass的”

2 )与函数类似。如果我有

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

这将打印“someFunction”

为什么我找的原因是,我有一点点类和子类的一个丛林和调试我想打印我在哪里,所以所有的方法我只是想沿线

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

所以我找了一个通用的命令知道类和它的功能是添加的东西,这样我就可以复制将行粘贴到所有方法中,而不必写入单独的行f或它们中的每

+0

如何使用调试器? – delnan

+0

使用.format代替%'从{}'执行{}格式(getFunctionName,getClassName) –

回答

5

使用__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 
+0

感谢Ashwini。 对于这个函数,我正在寻找一种打印名字的方法,而不用指定函数。编辑我的问题来解释我的目的是什么 – chrise

+0

@ user1734278看看我的编辑,这是你想要的。 –

+0

感谢您的编辑。看起来很完美 – chrise

3

功能 部分已经在this SO post回答。该代码将是:

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

对于类部分,使用方法:A.__name__A().__class__.__name(一个实例)

+0

谢谢。看起来像我在找什么 – chrise