作者tiefblau (tiefblau)
看板Python
标题[翻译] Google 建议的 Python 风格指南 17
时间Fri May 10 11:10:37 2013
原文网址:
http://google-styleguide.googlecode.com/svn/trunk/pyguide.html
* Function and Method Decorators
只有当有显而意见的优点时,使用 Decorators
(PEP:
http://docs.python.org/release/2.4.3/whatsnew/node6.html )
释义:
对函式与方法的装饰("the
@ notation"),常见於转换一般方法(method)为类别(class)、
静态方法(static methods) :
@classmethod 与
@staticmethod。
然而,装饰语法也支援使用者自己定义的装饰,具体而言,对於一个函式
my_decorator()
class C(object):
@my_decorator
def method(self):
# method body ...
等价於
class C(object):
def method(self):
# method body ...
method = my_decorator(method)
优点:
优雅地指定method的转换;可减少重复的程式码,加强不变性(invariant)...etc
缺点:
装饰语法对函式的参数与回传值可能会有有违本意的操作,产生出乎原先意料的行为。
此外,装饰在import时执行,一但错误的装饰程式码发生,几乎不可能修复。
决策:
当有显而易见的优点时,才聪明地使用 Decorators。同时遵守与函式一样的导入、命名原
则;有使用装饰的py文件,也应该明确的指出那些函式是decorator。对 decorators 单元
测试。
对於decorator本身,要避免外部依赖(e.g.依靠外部的 files, sockets, database conn-
ection, etc.),因为那些资料可能在实际执行 decorator 时(导入时、或许从pychecker
等其他工具程式),并无法被使用。
伴随着有效引数呼叫decorator时,应尽可能保证在任何情况下有正确的结果。
Decorators 是"top level code"的特殊情形-参考此指南最後一项 #Main 有更多讨论。
(
http://google-styleguide.googlecode.com/svn/trunk/pyguide.html#Main )
===
欢迎指正与建议,谢谢。
已报名五月Taipei.py,但是初学几个月,程度跟资历都还太浅,叫我上台我只能分享用
Pythn写功课的心得跟被电爆的经验啦XD
Anyway, 期待五月底看到大家。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.143
1F:推 suhorng:推推~~ 05/10 13:29
2F:推 timTan:也记得报 PyCon XD 多拉一些人吧。听 PyCon 很 High 的。 05/10 20:40