2024-04-20 00:09:23 发布
网友
我怎样才能写好一个装潢师呢?在
具体的问题包括:与其他装饰器的兼容性、签名的保存等
如果可能的话,我希望避免依赖decorator模块,但是如果有足够的优势,那么我会考虑它。在
相关
编写一个好的装饰器和编写一个好的函数没有什么不同。这意味着,理想情况下,使用docstring并确保decorator包含在测试框架中。在
您肯定应该使用decorator库,或者更好的是在标准库中使用functools.wraps()装饰器(从2.5开始)。在
decorator
functools.wraps()
除此之外,最好让你的装饰师专注于狭隘的领域,并且设计得很好。如果您的装饰器需要特定的参数,请不要使用*args或{}。并且填写您所期望的参数,因此不要:
*args
def keep_none(func): def _exec(*args, **kw): return None if args[0] is None else func(*args, **kw) return _exec
。。。使用。。。在
使用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'
编写一个好的装饰器和编写一个好的函数没有什么不同。这意味着,理想情况下,使用docstring并确保decorator包含在测试框架中。在
您肯定应该使用
decorator
库,或者更好的是在标准库中使用functools.wraps()
装饰器(从2.5开始)。在除此之外,最好让你的装饰师专注于狭隘的领域,并且设计得很好。如果您的装饰器需要特定的参数,请不要使用}。并且填写您所期望的参数,因此不要:
*args
或{。。。使用。。。在
^{pr2}$使用functools保存名称和文档。签名不会被保留。在
直接来自doc。在
相关问题 更多 >
编程相关推荐