如何使用Python中的方法引用方法名称?

Phi*_*rke 8 python methods introspection

假设我使用该方法定义了以下类foo:

class MyClass:
    def foo(self):
        print "My name is %s" % __name__
Run Code Online (Sandbox Code Playgroud)

现在,当我打电话时,foo()我希望/希望看到这个打印出来

My name is foo  
Run Code Online (Sandbox Code Playgroud)

但是我得到了

My name is __main__  
Run Code Online (Sandbox Code Playgroud)

如果我将类定义放入一个名为FooBarI get 的模块中

My name is FooBar  
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做

m = MyClass()
print m.foo.__name__
Run Code Online (Sandbox Code Playgroud)

我得到了我想要的东西

My name is foo
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙解释为什么__name__引用模块而不是方法名称?有一个简单的方法来获取方法名称?

非常感谢

Mat*_*ttH 11

这就是你所追求的:


from inspect import currentframe, getframeinfo

class MyClass:
    def foo(self):
        print "My name is %s" % getframeinfo(currentframe())[2]
Run Code Online (Sandbox Code Playgroud)


小智 4

名称始终引用局部变量或(如果不存在)全局变量。有一个全局 __name__ 包含模块的名称。

class MyClass:
  def foo(self):
    print "My name is %s" % MyClass.foo.__name__
Run Code Online (Sandbox Code Playgroud)

当然,这是多余的,而且几乎完全没有意义。只需输入方法名称:

class MyClass:
  def foo(self):
    print "My name is %s" % "foo"
    print "My name is foo"
Run Code Online (Sandbox Code Playgroud)