我在装饰Python中的静态方法时遇到了一些问题。我想下面的代码最能代表我的问题:Python:装饰静态方法recive不可调用方法
def decorator(func):
print callable(func)
return func
class Foo():
@decorator
@staticmethod
def bar():
return
# outputs False
print callable(Foo.bar)
# outputs True
这似乎是一个错误。我想它的出现是因为当方法Foo.bar
被传递给装饰器时,它是一个函数,而不是一个方法。这是我看到它不可调用的唯一原因,因为如果我们装饰一个标准函数,它不可调用,如下所示。
@staticmethod
def function():
return
print callable(function)
# outputs False
因此,这是在执行静态方法装饰的一个真正的错误,和/或是否有任何简单的解决方法?我确实想过写一个装饰器来设置一个__call__
属性,但我不知道callable
是如何实现的,所以我无法评估这种方法的成功。
请注意,您必须使用静态方法的新样式类才能在实例上调用,因为它使用了描述符。 – 2011-03-17 21:33:37
要使其工作,只需更改描述符的顺序。 – 2011-03-17 21:36:23