gpt4 book ai didi

python - 使用类作为方法装饰器

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:48 24 4
gpt4 key购买 nike

<分区>

虽然有plenty of resources about using classes as decorators ,我没能找到任何处理装饰问题的方法。这个问题的目的是解决这个问题。我将发布我自己的解决方案,但当然也邀请其他人发布他们的解决方案。


为什么“标准”实现不起作用

标准装饰器类实现的问题在于 python 不会创建装饰函数的绑定(bind)方法:

class Deco:
def __init__(self, func):
self.func= func

def __call__(self, *args):
self.func(*args)

class Class:
@Deco
def hello(self):
print('hello world')

Class().hello() # throws TypeError: hello() missing 1 required positional argument: 'self'

方法装饰器需要克服这个障碍。


要求

采用前面示例中的类,以下内容预计会起作用:

>>> i= Class()
>>> i.hello()
hello world
>>> i.hello
<__main__.Deco object at 0x7f4ae8b518d0>
>>> Class.hello is Class().hello
False
>>> Class().hello is Class().hello
False
>>> i.hello is i.hello
True

理想情况下,函数的 __doc__ 和签名以及类似的属性也会被保留。

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