Pocooスタイルガイド
Pocooスタイルガイドは、Flaskを含むすべてのPocooプロジェクトのスタイルガイドです。 このスタイルガイドは、Flaskへのパッチの要件であり、Flask拡張機能の推奨事項です。
一般に、Pocooスタイルガイドは PEP 8 に厳密に従いますが、いくつかの小さな違いと拡張があります。
一般的なレイアウト
- インデント:
4つの実空間。 タブも例外もありません。
- 最大行長:
どうしても必要な場合は、79文字で84のソフト制限があります。 break 、 Continue 、および return ステートメントを巧みに配置して、ネストされすぎたコードを回避するようにしてください。
- 長い声明の継続:
ステートメントを続行するには、円記号を使用できます。その場合、次の行を最後のドットまたは等号に揃えるか、4つのスペースをインデントする必要があります。
this_is_a_very_long(function_call, 'with many parameters') \ .that_returns_an_object_with_an_attribute MyModel.query.filter(MyModel.scalar > 120) \ .order_by(MyModel.name.desc()) \ .limit(10)
括弧または中括弧を使用してステートメントを分割する場合は、中括弧に揃えてください。
this_is_a_very_long(function_call, 'with many parameters', 23, 42, 'and even more')
アイテムが多いリストまたはタプルの場合は、最初の中括弧の直後に区切ります。
items = [ 'this is the first', 'set of items', 'with more items', 'to come in this line', 'like this' ]
- 空白行:
トップレベルの関数とクラスは2行で区切られ、それ以外はすべて1行で区切られます。 コード内の論理セグメントを区切るために、あまりにも多くの空白行を使用しないでください。 例:
def hello(name): print 'Hello %s!' % name def goodbye(name): print 'See you %s.' % name class MyClass(object): """This is a simple docstring""" def __init__(self, name): self.name = name def get_annoying_name(self): return self.name.upper() + '!!!!111'
式とステートメント
- 一般的な空白の規則:
括弧の内側にも、単語ではない単項演算子(
-
、~
など)の空白はありません。空白は二項演算子の間に配置されます。
良い:
exp = -1.05 value = (item_value / item_count) * offset / exp value = my_list[index] value = my_dict['key']
悪い:
exp = - 1.05 value = ( item_value / item_count ) * offset / exp value = (item_value/item_count)*offset/exp value=( item_value/item_count ) * offset/exp value = my_list[ index ] value = my_dict ['key']
- ヨーダの声明はノーゴーです:
定数と変数を比較しないでください。常に変数と定数を比較してください。
良い:
if method == 'md5': pass
悪い:
if 'md5' == method: pass
- 比較:
任意のタイプに対して:
==
および!=
is
およびis not
のシングルトンに対して(例:foo is not None
)True
またはFalse
と何かを比較しないでください(たとえば、foo == False
を実行せず、代わりにnot foo
を実行してください)
- 否定された封じ込めチェック:
not foo in bar
の代わりにfoo not in bar
を使用してください- インスタンスチェック:
type(A) is C
ではなくisinstance(a, C)
ですが、一般的にインスタンスチェックは避けてください。 機能を確認してください。
命名規則
- クラス名:
CamelCase
、頭字語は大文字のまま(HttpWriter
ではなくHTTPWriter
) - 変数名:
lowercase_with_underscores
- メソッド名と関数名:
lowercase_with_underscores
- 定数:
UPPERCASE_WITH_UNDERSCORES
- プリコンパイルされた正規表現:
name_re
保護されたメンバーには、接頭辞として1つのアンダースコアが付きます。 二重下線はミックスインクラス用に予約されています。
キーワードのあるクラスでは、末尾にアンダースコアが追加されます。 ビルトインとの衝突は許可されており、変数名にアンダースコアを追加して解決してはなりません。 関数がシャドウされたビルトインにアクセスする必要がある場合は、代わりにビルトインを別の名前に再バインドします。
- 関数とメソッドの引数:
- ;* クラスメソッド:最初のパラメーターとして
cls
- インスタンスメソッド:最初のパラメータとして
self
- プロパティのラムダでは、
display_name = property(lambda x: x.real_name or x.username)
のように、最初のパラメーターがx
に置き換えられる場合があります。
- インスタンスメソッド:最初のパラメータとして
Docstrings
- Docstringの規則:
すべてのdocstringは、Sphinxが理解できるようにreStructuredTextでフォーマットされています。 docstringの行数に応じて、レイアウトが異なります。 1行だけの場合、終了の三重引用符は開始と同じ行にあります。それ以外の場合、テキストは開始の引用符および文字列を独自の行で閉じる三重引用符と同じ行にあります。
def foo(): """This is a simple docstring""" def bar(): """This is a longer docstring with so much information in there that it spans three lines. In this case the closing triple quote is on its own line. """
- モジュールヘッダー:
モジュールヘッダーは、utf-8エンコーディング宣言(ASCII以外の文字が使用されている場合、常に推奨されます)と標準のdocstringで構成されます。
# -*- coding: utf-8 -*- """ package.module ~~~~~~~~~~~~~~ A brief description goes here. :copyright: (c) YEAR by AUTHOR. :license: LICENSE_NAME, see LICENSE_FILE for more details. """
承認されたFlask拡張機能には、適切な著作権とライセンスファイルが必要であることに注意してください。
コメント
コメントのルールはdocstringに似ています。 どちらもreStructuredTextでフォーマットされています。 コメントを使用して属性を文書化する場合は、開始ポンド記号(
#
)の後にコロンを付けます。