2014-01-22 20 views
2

Я работаю над проектом, в котором у меня есть класс с некоторыми декораторами 10ish, где я использую их для обеспечения проверки некоторых методов и атрибутов (если это актуально, проверка очень общие и повторно используемые в других местах на других классах). Мне посоветовал друг, который намного больше похож на PEP8, чем я, потому что это плохая форма. Однако я не могу find a cite для that, или даже хороший совет относительно того, что хорошо использует декоратор против плохой или несущественный.PEP 8 и декодеры Python

Мое собственное введение в использование декораторов произошло из Flask, где они предоставляют информацию о маршрутизации и могут быть сложены в пару. Может ли кто-нибудь предоставить цитированную информацию о правильном и неправильном использовании декораторов и о лучших альтернативах?

+1

Это интригующий вопрос, но это может помочь показать образец того, как выглядит ваш код. – mhlester

+1

Подождите, его десять декораторов на одном уровне? –

+8

Декораторы - это в основном простые функции, применяемые с хорошим синтаксисом. Речь идет о дизайне приложения, а не о стиле кодирования, который выходит за рамки PEP 8. –

ответ

3

В Python имеет значение для чтения кода. 10 или около того декораторов может быть довольно сложно отслеживать, в то время как 2 o 3 легче читать. Вам не требуется соглашение для каждого персонажа, который вы вводите: иногда вам просто нужно пойти на то, что легче читать

2

Как сказал Мартин Пайтерс в комментариях, декораторы - это просто функции, применяемые к функции, определенной ниже. Чтобы прочитать сценарий, я бы рекомендовал хранить не более 3 или 4 декораторов. Но PEP8 не дает никаких рекомендаций относительно количества декораторов, которые вы должны складывать, потому что это не цель PEP :)

Если у вас есть больше, это проблема архитектуры/приложения для дизайна , а не проблема с кодировкой. Возможно, вам придется переопределить вашу архитектуру, особенно если вы применяете один и тот же набор декораторов к каждой функции.

1

Я бы сказал - чисто как мнение и с точки зрения удобочитаемости, что более чем пара декораторов - это не очень хорошая идея, тем более что заказ может быть критическим. Вам будет лучше видеть, есть ли какие-либо базовые классы - возможно, с самими декораторами, которые вы можете логически разбить свой класс на иерархию наследования.

Если это разумное разделение, то декораторы будут соответствовать тем, что делают/содержат классы. если у вас есть проверка класса параметров с помощью декоратора проверки и который наследуется от класса string_parameter, который имеет проверку строки и т. д., вы получите более понятные классы и декораторы.

Обратите внимание, что вы также можете складывать декораторы - то есть декоратор, который украшает декоратор.

Смежные вопросы