gpt4 book ai didi

python - 这怎么称呼以及如何完成( `function_name.decorator`)?

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:21 26 4
gpt4 key购买 nike

真的很抱歉这个极其愚蠢的标题,但如果我知道它是什么,我就不会写在这里 (:

def some_decorator( func ):
# ..

class A:
@some_decorator
def func():
pass
@func.some_decorator # this one here - func.some_decorator ?
def func():
pass

some_decorator 装饰 func - 没关系。但是什么是 func.some_decorator 以及 some_decorator 如何成为 func 的成员(或其他什么?)?

附言我 90% 确定这里有这样的问题(因为这看起来很基本),但我不知道如何搜索它。如果有完全重复,我会删除这个问题。


注意:这两个成员函数都被命名为func,这不是拼写错误,也不是偶然的。装饰器用于重载:问题与Decorating method (class methods overloading)有关

最佳答案

请记住,带有装饰器的函数定义等同于:

def func():
pass
func = some_decorator(func)

所以在下面几行中,func 不是指您定义的函数,而是指装饰器将其变成的函数。另请注意,装饰器可以返回任何 对象,而不仅仅是函数。所以 some_decorator 返回一个带有方法的对象(不幸的是,名称 some_decoratorfunc 在示例中被重用 - 这很令人困惑,但不会' t 改变任何关于这个概念的东西)它本身就是一个装饰器。由于首先评估 @ 之后的表达式,因此在定义另一个普通函数 func 之后,您仍然可以引用第一个装饰器的方法。该装饰器应用于此新功能。完整的例子等同于:

class A:
def func():
pass
func = some_decorator(func)

_decorator = func.some_decorator
def func():
pass
func = _decorator(func)

关于python - 这怎么称呼以及如何完成( `function_name.decorator`)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6010102/

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