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)