Как бы вы правильно нарушили эту строку, чтобы соответствовать правилам pep8? - PullRequest
16 голосов
/ 09 мая 2011

Учитывая этот класс Python, реализующий форму Django, как бы вы правильно нарушили ее, чтобы соответствовать стандартам PEP8?

class MyForm(forms.Form):
    categories = forms.CharField(required=False,
                                 widget=forms.SelectMultiple(choices=CATEGORY_VALUE),                                               
                                 label="Categories")
    additional_item_ship_cost = forms.CharField(required=False, max_length=10,                                                      
                                                label="Additional Item Ship Cost")

В частности, параметры widget = и label = нарушают правила PEP8 для длины строки.

Что сразу приходит на ум, так это то, что я могу определить виджет и метку за пределами класса, а затем использовать их в определении класса, но это кажется очень непитонным.

Ответы [ 3 ]

22 голосов
/ 09 мая 2011

Я не думаю, что PEP8 говорит об этом много, но я бы просто пошел с двойным отступом для параметров:

class MyForm(forms.Form):
    categories = forms.CharField(
            required=False,
            widget=forms.SelectMultiple(choices=CATEGORY_VALUE),
            label="Categories"
        )
    additional_item_ship_cost = forms.CharField(
            required=False,
            max_length=10,
            label="Additional Item Ship Cost"
        )
4 голосов
/ 22 июня 2013

Я согласен с использованием двойного (8 столбцов) отступа для строк продолжения , поскольку он легко отличает продолжение от отступа блока. Я также хочу, чтобы отступ был независимо от длины первой строки ; длина будет изменяться при сохранении кода, но для этого не нужно менять строки продолжения.

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

Обратная косая черта для продолжения проблематична (невидимые конечные пробелы могут изменить эффект), и, к счастью, почти никогда не нужны, поскольку Python автоматически продолжает оператор в синтаксисе открытых скобок. Прекращение вызова функций в открытой парне (и диктовки в открытой скобке, списки в открытой скобке и т. Д.) - вот чего я достигаю в первую очередь.

Так что я бы сделал:

class MyForm(forms.Form):
    categories = forms.CharField(
            required=False,
            widget=forms.SelectMultiple(
                choices=CATEGORY_VALUE),
            label="Categories")
    additional_item_ship_cost = forms.CharField(
            required=False, max_length=10,
            label="Additional Item Ship Cost")
1 голос
/ 10 мая 2011

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

class MyForm(forms.Form):
    categories = forms.CharField(required=False,
                                 widget=forms.SelectMultiple(choices=\
                                     CATEGORY_VALUE),                                               
                                 label="Categories")
    additional_item_ship_cost = forms.CharField(required=False, max_length=10,                                                      
                                                label=\
                                                "Additional Item Ship Cost")

Кроме того, вы можете не знать, что Python объединит смежные литеральные строки, выбрасывая любые пробелы между ними, поэтому вышеприведенное можно переписать так:

class MyForm(forms.Form):
    categories = forms.CharField(required=False,
                                 widget=forms.SelectMultiple(choices=CATEGORY_VALUE),                                               
                                 label=\
                                     "Categories")
    additional_item_ship_cost = forms.CharField(required=False, max_length=10,                                                      
                                                label="Additional"\
                                                    " Item Ship Cost")

Наконец, внутри паренов вы можете разбить строки на «точку», точно так же, как на запятой, и вы можете использовать парены просто, чтобы получить эту способность:

class MyForm(forms.Form):
    categories = forms.CharField(required=False,
                                 widget=forms.
                                     SelectMultiple(choices=\
                                     CATEGORY_VALUE),                                               
                                 label="Categories")
    additional_item_ship_cost = (forms.
                                     CharField(required=False, max_length=10,                                                      
                                               label="Additional "\
                                                   "Item Ship Cost"))

Объедините все это с продуманным де-отступом последующих разделенных строк, и вы сможете избежать превышения строки из 80 символов.

...