【发布时间】:2016-03-29 21:55:00
【问题描述】:
我是编程新手,所以当我想要一个将硬编码函数的名称转换为字符串的命令时,我查找了它并开始使用内置的__name__ 函数。问题是我认为我不明白__name__ 如何检索想要的名称。我知道这与 local() 或 dir() 当前可见的内容有关,但仅此而已......(我自己对这个主题的研究对我来说有点难以理解)结果,我偶然发现遇到一个我不知道如何解决的错误。
这是一些重现我的错误的代码:
class Abc:
@staticmethod
def my_static_func():
return
def my_method(self):
return
class_list = [my_static_func]
method_list = [my_method]
#These calls work
Abc.my_static_func.__name__
Abc.my_method.__name__
Abc.method_list[0].__name__
#But This call raises an AttributeError
Abc.class_list[0].__name__
我收到此错误消息:
AttributeError: 'staticmethod' object has no attribute '__name__'
那么为什么当我将我的静态方法放入一个列表中,然后尝试从列表中获取函数的名称时它不起作用?如果这个问题很愚蠢,请原谅我。如您所见,我不明白__name__ 工作原理的基本原理(以及我什至不知道给这些主题命名的其他东西!)。一个答案会很好,但也欢迎参考一些文档。
【问题讨论】:
-
我发现了这个:stackoverflow.com/questions/1987919/…。显然 staticmethod 不返回函数:classmethod 和 staticmethod 返回描述符对象,而不是函数。大多数装饰器并非设计为接受描述符。
标签: python python-3.x attributes