不错的Python装饰师

2024-04-20 00:09:23 发布

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

我怎样才能写好一个装潢师呢?在

具体的问题包括:与其他装饰器的兼容性、签名的保存等

如果可能的话,我希望避免依赖decorator模块,但是如果有足够的优势,那么我会考虑它。在

相关


Tags: 模块of答案装饰decoratorfunctions我会装潢
2条回答

编写一个好的装饰器和编写一个好的函数没有什么不同。这意味着,理想情况下,使用docstring并确保decorator包含在测试框架中。在

您肯定应该使用decorator库,或者更好的是在标准库中使用functools.wraps()装饰器(从2.5开始)。在

除此之外,最好让你的装饰师专注于狭隘的领域,并且设计得很好。如果您的装饰器需要特定的参数,请不要使用*args或{}。并且填写您所期望的参数,因此不要:

def keep_none(func):
    def _exec(*args, **kw):
        return None if args[0] is None else func(*args, **kw)

    return _exec

。。。使用。。。在

^{pr2}$

使用functools保存名称和文档。签名不会被保留。在

直接来自doc。在

>>> from functools import wraps
>>> def my_decorator(f):
...     @wraps(f)
...     def wrapper(*args, **kwds):
...         print 'Calling decorated function'
...         return f(*args, **kwds)
...     return wrapper
...
>>> @my_decorator
... def example():
...     """Docstring"""
...     print 'Called example function'
...
>>> example()
Calling decorated function
Called example function
>>> example.__name__
'example'
>>> example.__doc__
'Docstring'

相关问题 更多 >