如何在Python中从一个方法中引用另一个方法名?

8 投票
7 回答
548 浏览
提问于 2025-04-15 19:01

假设我有一个定义了方法 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]

撰写回答