17

Django フォームを実装するこの Python クラスが与えられた場合、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 ではないように感じます。

4

3 に答える 3

23

PEP8 がそれについて多くを語っているとは思いませんが、単純にパラメーターを 2 重にインデントします。

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 に答える
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 に答える