给定以下示例类:
class Foo:
def aStaticMethod():
return "aStaticMethod"
aVariable = staticmethod(aStaticMethod)
aTuple = (staticmethod(aStaticMethod),)
aList = [staticmethod(aStaticMethod)]
print Foo.aVariable()
print Foo.aTuple[0]()
print Foo.aList[0]()
为什么对 aVariable
的调用可以正常工作,但是对于 aTuple
和 aList
它返回错误 'staticmethod' object is不可调用
?
最佳答案
这是因为静态方法是一个描述符。当您将它附加到一个类并使用通常的语法调用它时,python 会调用它的 __get__
方法,该方法返回一个可调用对象。当您将它作为一个裸描述符处理时,python 永远不会调用它的 __get__
方法,您最终会尝试直接调用不可调用的描述符。
所以如果你想调用它,你必须自己填写详细信息:
>>> Foo.aTuple[0].__get__(None, Foo)()
'aStaticMethod'
在这里,None
被传递给 instance
参数(访问描述符的实例),Foo
被传递给owner
参数(此描述符实例所在的类)。这导致它返回一个实际的可调用函数:
>>> Foo.aTuple[0].__get__(None, Foo)
<function aStaticMethod at 0xb776daac>
关于python - 在类级容器初始化中调用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3932948/