Kir*_*rov 3 python decorator python-3.x
真的很抱歉极其愚蠢的头衔,但如果我知道它是什么,我不会写在这里(:
def some_decorator( func ):
# ..
class A:
@some_decorator
def func():
pass
@func.some_decorator # this one here - func.some_decorator ?
def func():
pass
Run Code Online (Sandbox Code Playgroud)
some_decorator装饰func- 没关系.但是,成员(或其他什么?)是什么func.some_decorator以及如何some_decorator成为func?
PS我90%肯定,这里有这样的问题(因为这似乎是基本的东西),但我不知道如何搜索它.如果有完全重复,我会删除这个问题.
注意:两个成员函数都被命名,这不是错字,也不是偶然的func.装饰器用于重载:问题与装饰方法有关(类方法重载)
小智 7
请记住,使用装饰器的函数定义等效于:
def func():
pass
func = some_decorator(func)
Run Code Online (Sandbox Code Playgroud)
因此,在以下几行中,func并未引用您定义的函数,而是指装饰器将其转换为什么.还要注意,装饰器可以返回任何对象,而不仅仅是函数.因此,some_decorator返回一个带有方法的对象(不幸的是名称some_decorator并func在示例中重用 - 它令人困惑,但不会改变任何有关概念的东西),它本身就是一个装饰器.作为@首先计算之后的表达式,在定义另一个普通函数之后,仍然可以引用第一个装饰器的方法func.该装饰器适用于这个新功能.完整的例子就等同于:
class A:
def func():
pass
func = some_decorator(func)
_decorator = func.some_decorator
def func():
pass
func = _decorator(func)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |