Как бы вы правильно нарушили эту строку, чтобы соответствовать правилам 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 для длины строки.
То, что сразу приходит в голову, это то, что я могу определить виджет и ярлык вне класса, а затем использовать их в определении класса, но это очень непифоно.
Ответы
Ответ 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 символами.