[解決!Python]PEP 8の命名規則まとめ:解決!Python
Pythonコードを書くときに変数や関数、クラスなどの名前はどのように付けたらよいだろう。PEP 8で述べられているその基本をまとめた。
種類 | 命名規約 |
---|---|
モジュール名 | 全て英小文字 可読性が高まるのならアンダースコア「_」を使ってもよい |
パッケージ名 | 全て英小文字 アンダースコアの使用は推奨されない |
クラス名 | キャメルケース(CamelCase) クラスの主な用途が呼び出し可能オブジェクトであり(「クラス名()」のように呼び出し可能とする)、インタフェースのドキュメントが整備されているときには関数名と同じ命名規約を使ってもよい |
型変数名 | キャメルケースでなるべく短い名前がよい。共変性があるときには末尾に「_co」を、反変性があるときには末尾に「_contra」を付加することが推奨される |
例外名(例外クラス名) | クラス名と同じ命名規約となるが、例外名の最後に「Error」を付加すべき(その例外が実際にエラーである場合) |
関数名 | 全て英小文字。可読性が高まるのであれば、単語と単語はアンダースコア「_」で区切る |
グローバル変数名 | 関数名と同じ |
ローカル変数名 | 関数名と同じ |
関数やメソッドの引数名 | インスタンスメソッドの第1引数の名前には常にselfを使用する クラスメソッドの第1引数の名前委には常にclsを使用する 引数名が予約語と衝突するときには、省略した語を使うよりも末尾にアンダースコアを1つ追加するのが一般にはよい(clssよりもclass_の方がよい) |
メソッド名/インスタンス変数名 | 関数名と同じ パブリックではないメソッドとインスタンス変数の名前にはアンダースコアを1つ前置する 派生クラスでの名前の衝突を避けるには、2個のアンダースコア「__」を前置する。これによりPythonの名前マングリングが行われる |
定数名 | 通常はモジュールのトップレベルで定義する 全て大文字で単語間はアンダースコアで区切る Pythonではこのようにして定義した定数は代入可能であることには注意 |
PEP 8で示されている命名規約(一部) |
PEP 8に示されている命名規約
PEP 8はPythonコードを記述する際のコーディングスタイルの基本的なガイドラインを示すものだ。この中では変数や関数、クラスなどの名前を付ける際にもどのようにすべきが示されている。
使用すべきではない1文字の名前として、PEP 8では「l」(小文字のエル)、「O」(大文字のオー)、「I」(大文字のアイ)が挙げられている。使用している環境のフォント設定によっては、これらは数字の「0」「1」と見分けが付きにくくなるからだ。また、PEP 8では標準ライブラリで使用される識別子はASCIIと互換性があるものにしなければならないとあるが、自分でコードを書く際にもこれに準拠するのがよいだろう。
PEP 8に示されている命名規約を表にまとめたのが上に掲載した表だ。
表にするとたくさんの命名規約があるように思えるかもしれないが、基本的にはクラス名(例外クラス名)はキャメルケース(単語の先頭だけを大文字に、残りを小文字にして単語と単語は区切り文字なしで連続させる)を使い、その他の場面では英小文字とアンダースコアの組み合わせを使用するのが大方針といえる(ただし、パッケージ名は英小文字のみとするのがよい)。定数については大文字とアンダースコアの組み合わせた名前を付けることで「これは定数である」と表明できるが、実際には代入可能なことは覚えておこう。
加えて覚えておきたいのはクラスの属性として他に公開したくないものがある場合だ。このときには、名前を1個のアンダースコア「_」または2個のアンダースコア「__」で始める。前者はコードを書いた側から、コードを利用する側への「この属性(インスタンス変数やメソッドなど)は内部で使用するもの」であることの表明であり、実際にはコードの利用する側はそれらを自由に使用できてしまう。
Copyright© Digital Advantage Corp. All Rights Reserved.