如何在Python中从一个方法中引用另一个方法名?
假设我有一个定义了方法 foo
的类:
class MyClass:
def foo(self):
print "My name is %s" % __name__
现在当我调用 foo()
的时候,我希望看到这个输出:
My name is foo
但是我得到的是:
My name is __main__
如果我把这个类的定义放到一个叫 FooBar
的模块里,我会得到:
My name is FooBar
但是如果我这样做:
m = MyClass()
print m.foo.__name__
我得到的正是我想要的输出:
My name is foo
有人能帮我解释一下为什么 __name__
指的是模块而不是方法名吗?有没有简单的方法可以获取方法名?
非常感谢
7 个回答
3
__name__
是用来指代模块的,因为 这就是它的作用。要想获取当前正在运行的函数,唯一的方法就是查看调用栈。
4
名字总是指代局部变量,或者如果没有局部变量的话,就指代全局变量。还有一个全局的 __name__,它表示模块的名字。
class MyClass:
def foo(self):
print "My name is %s" % MyClass.foo.__name__
当然,这样做有点多余,几乎没有什么意义。直接写出方法的名字就行了:
class MyClass:
def foo(self):
print "My name is %s" % "foo"
print "My name is foo"
11
这段代码可以实现你想要的功能:
from inspect import currentframe, getframeinfo
class MyClass:
def foo(self):
print "My name is %s" % getframeinfo(currentframe())[2]