Подтвердить что ты не робот

Как бы вы правильно нарушили эту строку, чтобы соответствовать правилам pep8?

С учетом этого класса 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 для длины строки.

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

4b9b3361

Ответ 1

Я не думаю, что 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"
        )

Ответ 2

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

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

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

Итак, я бы сделал:

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")

Ответ 3

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

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")

Наконец, внутри parens вы можете разделить строки на "точку" так же, как и на запятую, и вы можете использовать parens JUST, чтобы получить эту способность:

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 символами.