【发布时间】:2018-11-04 11:00:19
【问题描述】:
我是这里的新蟒蛇。我有一个问题。代码是这样的:
def get(path):
'''
Define decorator @get('/path')
'''
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kw):
return func(*args, **kw)
wrapper.__method__ = 'GET'
wrapper.__route__ = path
return wrapper
return decorator
这是一个装饰器,我不懂
"
wrapper.__method__ = 'GET'
wrapper.__route__ = path
"__xxx__"一般用来定义特殊的方法和属性,为什么代码中定义函数的属性使用样式?这不是提倡吗?
并且可以为函数动态添加属性以及为类动态添加属性吗?
太感谢了~
【问题讨论】:
-
如果您是 Python 新手,那么您会看到完全错误的 Python 代码。
-
谢谢。我只是不明白为什么代码添加函数的属性像这种风格。双下划线开头和结尾通常用于特殊变量?就像 name 或 init
-
是的,函数是第一类对象,您可以随意设置和修改属性。同时,该语言特别不赞成制作自定义的 dunder 属性,因此编写此代码的人指望 Python 本身不会引入任何冲突的更改。不要做那样的事情。但是通常给函数添加属性是完全可以的。
-
@lee。双下划线(dunder)属性都是语言明确保留的。
-
知道了。非常感谢。你帮了我很多~@Mad Physicist
标签: python python-3.x function python-decorators