Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PEP8和Python装饰程序_Python_Decorator_Pep8_Python Decorators - Fatal编程技术网

PEP8和Python装饰程序

PEP8和Python装饰程序,python,decorator,pep8,python-decorators,Python,Decorator,Pep8,Python Decorators,我正在从事一个项目,在这个项目中,我有一个类,其中包含一些10ish的decorator,我使用它们对一些方法和属性进行验证(如果相关的话,验证是非常通用的,并在其他类上重复使用)。一位比我更爱打气的朋友告诉我,这是一种不好的形式——然而,我不能支持,甚至不能就装饰师的好用与坏用或不重要的用之间的关系给出好的建议 我自己对使用装饰器的介绍来自Flask,它们提供路由信息,可以堆叠几层。有人能提供关于正确与不正确的decorator用法的引用信息,以及更好的替代方法吗?Python中重要的是代码可

我正在从事一个项目,在这个项目中,我有一个类,其中包含一些10ish的decorator,我使用它们对一些方法和属性进行验证(如果相关的话,验证是非常通用的,并在其他类上重复使用)。一位比我更爱打气的朋友告诉我,这是一种不好的形式——然而,我不能支持,甚至不能就装饰师的好用与坏用或不重要的用之间的关系给出好的建议


我自己对使用装饰器的介绍来自Flask,它们提供路由信息,可以堆叠几层。有人能提供关于正确与不正确的decorator用法的引用信息,以及更好的替代方法吗?

Python中重要的是代码可读性。10个左右的装饰师可能很难跟踪,而2O3则更容易阅读。您不需要对键入的每个字符都使用约定:有时,您只需要选择更易于阅读的内容

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


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

我想说,纯粹是出于观点和可读性的考虑,多使用几个装饰程序不是一个好主意,特别是因为排序可能很关键。您最好看看是否有任何基类——可能有自己的装饰器,您可以在继承层次结构中逻辑地将类拆分为这些基类

如果这是一个合理的分离,那么装饰器将匹配类正在做/包含的内容,例如,如果您有一个带有验证装饰器的参数类验证,并且从具有字符串验证的string_参数类继承,等等,那么您将得到更易理解的类和装饰器


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

这是一个有趣的问题,但它可能有助于展示代码外观的示例。它是一个类上的十个装饰器??装饰器基本上只是应用了良好语法的函数。这是关于应用程序设计,而不是编码风格,远远超出了PEP 8的范围。基本上,如果一个装饰者让经常重复的样板代码为装饰者折叠成一行,你做得很对。你的堆栈跟踪必须看起来像Hell。是否应该将“stacking”理解为修饰修饰函数或方法的结果的修饰符?@xtofl我想说,既然修饰符可以修改函数或方法的输入和结果,那么修饰符“包装”方法,并且修饰符/包装器本身可以有修饰符/包装器(s) 。