gpt4 book ai didi

Python:修饰的静态方法接收不可调用的方法

转载 作者:太空狗 更新时间:2023-10-29 21:32:42 24 4
gpt4 key购买 nike

我在用 Python 修饰静态方法时遇到一点问题。我认为以下代码最能代表我的问题:

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 是如何实现的,所以我无法衡量这种方法是否成功.

最佳答案

方法函数。但是 staticmethod 对象不是。他们是descriptors ,所以当您以 Cls.static_method 访问它时,有额外的魔法可以为您提供可调用对象,但是当您使用(即传递给装饰器)static_method 时,这种魔法无法隐藏任何东西> 在 Cls 的主体内。你不能真正解决这个问题,至少不能完全解决。一个更简单的解决方案是重新排序装饰器,以便最后应用 staticmethod - 即把它放在顶部,高于所有其他装饰器。

关于Python:修饰的静态方法接收不可调用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5345413/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com