PEP 8和Python装饰器

时间:2014-01-22 18:59:59

标签: python decorator pep8 python-decorators

我正在开发一个项目,其中我有一个类,其上有一些10个装饰器,我正在使用它们来提供某些方法和属性的验证(如果它是相关的,验证是非常通用的,并且重新在其他类别的其他地方使用)。我被一位朋友告知我,他的PEP8比我更多,因为这是一种糟糕的形式 - 但是,find a cite我不能that,甚至对于什么是好的建议很好地利用了装饰者而不是坏人或非必要者。

我自己对使用装饰器的介绍来自Flask,他们在那里提供路由信息,并且可以堆叠很多。有人可以提供关于正确与不正确的装饰器使用的引用信息,以及更好的替代方案吗?

3 个答案:

答案 0 :(得分:3)

Python中最重要的是代码可读性。 10个左右的装饰器可能很难跟踪,而2 o 3更容易阅读。你输入的每个角色都不需要约会:有时,你只需要更容易阅读的内容

答案 1 :(得分:2)

正如Martijn Pieters在评论中所说,装饰器只是应用于下面定义的函数的函数。为了保持脚本可读,我建议保留不超过3或4个装饰器。但是PEP8没有给出你应该堆叠的装饰器数量的任何建议,因为它不是PEP的目标:)

如果你有更多,那就是架构/应用程序设计问题,而不是编码风格问题。您可能需要重新定义您的体系结构,特别是如果您在每个函数上应用相同的装饰器套件。

答案 2 :(得分:1)

我想说 - 纯粹作为一个意见问题而且从可读性的角度来看,不止一些装饰者不是一个好主意 - 特别是因为排序可能很关键。您最好查看是否存在任何基类 - 可能使用自己的装饰器,您可以将类逻辑地拆分为继承层次结构。

如果它是合理的分离,则装饰器将匹配类正在进行/包含的内容,例如,如果您使用验证装饰器进行参数类验证,并且继承自具有字符串验证等功能的string_parameter类,那么您最终将获得更易理解的类和装饰器。

请注意,您还可以堆叠装饰器 - 即装饰装饰器的装饰器。