17

给定这个 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 的行长规则。

立即想到的是,我可以在类之外定义小部件和标签,然后在类定义中使用它们,但这感觉非常不符合 Python 风格。

4

3 回答 3

23

我不认为 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"
        )
于 2011-05-09T00:27:32.033 回答
4

我同意对续行使用双(8 列)缩进,因为它很容易区分续行和块缩进。我还希望缩进与第一行的长度无关;随着代码的维护,长度会发生变化,但这不应该需要更改续行。

所以不要将续行与第一行的任何内容对齐;相反,对任何续行使用相同的相对缩进

用于继续的反斜杠是有问题的(不可见的尾随空格会改变效果),幸运的是几乎从来不需要,因为 Python 会自动在开括号语法中继续语句。我首先要在 open-paren 处中断函数调用(以及在 open-brace 处的 dicts,在 open-bracket 处的列表等)。

所以我会这样做:

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")
于 2013-06-22T00:33:57.573 回答
1

您已经知道可以在括号内以逗号分隔一行。你知道你总是可以使用反斜杠换行符组合来分割你不能分割的行吗?:

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 个字符的行。

于 2011-05-10T00:05:34.540 回答