鉴于这个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规则的行长。
我立即想到的是,我可以在类之外定义小部件和标签,然后在类定义中使用它们,但这感觉非常不同于pythonic。
答案 0 :(得分:22)
我不认为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"
)
答案 1 :(得分:4)
我同意对连续行使用双(8列)缩进,因为它很容易区分延续和块缩进。我还希望缩进独立于第一行的长度;长度将随着代码的维护而改变,但这不需要更改延续线。
所以不要在第一行排列任何连续行;相反,对任何延续行使用相同的相对缩进。
用于延续的反斜杠是有问题的(不可见的尾随空格可以改变效果),幸运的是几乎不需要,因为Python会自动在开放包围语法中继续语句。 在open-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")
答案 2 :(得分:1)
您已经知道可以用逗号在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中,你可以像在逗号处一样在'dot'处分割线条,你可以使用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"))
将所有这些与后续分割线的明智去缩进相结合,您应该能够避免超过80个字符的行。