如何在无法访问其定义的函数上使用python修饰符?

2024-04-23 12:02:59 发布

您现在位置:Python中文网/ 问答频道 /正文

假设由于管理原因,我没有对模块xxx的写访问权。你知道吗

我想做一些类似的事情:

from xxx import yyy

@myDeco
yyy

当然失败了。你知道吗

我想我能做到

yyy = myDeco(yyy)

但是有没有办法使用@myDeco符号呢?或者只有在def之前才允许这样做?你知道吗


Tags: 模块fromimportdef符号原因事情xxx
2条回答

在Python参考文档Compound Statements部分中,它说:

decorated      ::=  decorators (classdef | funcdef)
decorators     ::=  decorator+
decorator      ::=  "@" dotted_name ["(" [argument_list [","]] ")"] NEWLINE
funcdef        ::=  "def" funcname "(" [parameter_list] ")" ":" suite

这是语法规则的一部分。如您所见,decorator只在函数或类定义之前应用,这是def <funcname>启动的。继续说,注意:

A function definition may be wrapped by one or more decorator expressions. Decorator expressions are evaluated when the function is defined, in the scope that contains the function definition.

也就是说,请记住,装饰符实际上只是语法上的糖分,在它们可用之前:

func = decorate_func(func)

而是用了。因此,如果您所拥有的只是某个变量中的函数对象,那么就不能使用decorator语法糖,必须还原到第二个方法。你知道吗

@语法只允许在defclass之前使用。你知道吗

相关问题 更多 >