【发布时间】:2013-05-11 11:18:18
【问题描述】:
我无法完成以下功能:
def fullyQualifiedMethodNameInStack(depth=1):
"""
The function should return <file>_<class>_<method> for the method in the
stack at specified depth.
"""
fileName=inspect.stack()[depth][1]
methodName=inspect.stack()[depth][3]
class= """ please help!!! """
baseName=os.path.splitext( os.path.basename( fileName ) )[0]
return '{0}_{1}_{2}'.format( baseName, className, methodName )
如您所见,我想要正在执行的方法的类名。 inspect返回的栈只有方法名,不知道如何找到属于该方法的类。
【问题讨论】:
-
1) 你只能看到函数,不能看到方法,2) 你只能对实例的类型做出有根据的猜测。这与最初定义该方法的类不同。够了吗?
-
嗯,我希望有可能无需猜测就能找出函数定义在哪个类中。我能做的最有根据的猜测是什么?
-
@MartijnPieters 我对第 2 点很感兴趣。
inspect.stack()似乎始终返回函数名称,而不是函数对象。 -
@millimoose:没错,栈只记录了当前正在执行的函数的名字。这也不一定是访问它的名称。
-
@MartijnPieters 这有点令人惊讶,我本以为实际的函数对象会在某个地方。尽管即使这样也可能并不完美,尤其是考虑到我假设 Python 解释器最终会首先“解包”绑定方法对象。
标签: python