擅长:python、mysql、java
<p>几乎可以肯定,有更好的方法可以做到这一点,但在有人指出这一点之前,这将是可行的:</p>
<pre><code>import inspect
class testclass:
def testmethod(self):
log()
def log():
stack = inspect.stack()
try:
print "Whole stack is:"
print "\n".join([str(x[4]) for x in stack])
print "-"*20
print "Caller was %s" %(str(stack[2][4]))
finally:
del stack
testclass().testmethod()
</code></pre>
<p>其输出如下:</p>
<pre><code>Whole stack is:
[' stack = inspect.stack()\n']
[' f()\n']
['testclass().testmethod()\n']
[' exec code in self.locals\n']
[' ret = method(*args, **kwargs)\n']
None
--------------------
Caller was ['testclass().testmethod()\n']
</code></pre>