『Python入門』推奨されている命名規約(PEP 8)

Python プログラミング Python

Pythonは「PEP 8(Pythonコードのスタイルガイド)」の命名規約に基づいて変数名や関数名などの要素名を命名することを推奨しています。

命名規約やコーディングスタイルに沿った設計を行うことで、プロジェクトの負担軽減が見込め、誰が読んでも理解できる一貫性のある理想的なコードに近づけることが出来ます。

この記事では、Pythonの命名規約について記載していきます。

 

いろいろな命名規約

名前の付け方には多くの方法があります。ここではよく使われる命名規約を上げます。

b 小文字1文字
B 大文字1文字
lowercase 小文字のみ
lower_case_with_underscores 小文字とアンダースコアの組合
UPPERCASE 大文字のみ
UPPER_CASE_WITH_UNDERSCORES 大文字とアンダースコアの組合せ
CapitalizedWords 最初の1文字は大文字で、その後はCamelCase (CapWords、CamelCaseとも呼ぶ)
注意: CapWordsの中で頭字語を含める場合、頭字語の全ての文字を大文字にします。
例)HttpServerError より HTTPServerError の方が良い。
mixedCase CapitalizedWordsとにていますが、はじめの文字が小文字になります。
Capitalized_Words_With_Underscores 複数の単語を組み合わせた命名を行う場合に、各単語の先頭の文字を大文字で表記し、アンダースコアで区切る。

 

次のようにアンダースコアを名前の前後に付ける特別なやり方もあります。

C/C++ のモジュールはアンダースコアで開始する。
アンダースコアを名前の最初に付けることで、公開されていないメソッドやインスタンス変数であり、内部だけで使うことを示します。(_single_leading_underscore)
アンダースコアを名前の最初に2個付けることで、サブクラスでの名前との衝突を防ぎます。
アンダースコアを名前の最後に付けることで、Pythonの予約語との衝突を防ぎます。(len_)
アンダースコアが名前の前後に連続で2つ付いたメソッドを、特殊メソッド(マジックメソッド)と言い、この手の名前を新しく作ることは推奨しない。(__init__, __import__, __file__)

 

Pythonでは推奨しない命名規約

先ほど紹介した命名方法のうち、Pythonで推奨しない命名規約がいくつかあるので以下に挙げます。

Capitalized_Words_With_Underscoresは醜いとのことで推奨されていません。
ライブラリ名の一部を名前に付けること(Xライブラリでは公開関数の全てに"X"が付いている。)
1文字での命名は可能ですが、以下は推奨されません。他のアルファベットと区別がつかないためバグのもとになります。
 l(小文字のエル)
 O(大文字のオー)
 I(大文字のアイ)

 

Pythonで推奨する命名規約

Pythonでは以下の命名規約を推奨しています。

・公開するAPIの名前は、実装よりも使い方を反映した名前にすること。
・ASCIIと互換性を保つため、英単語を名前に使うこと。

それぞれの要素名として以下の命名規約を推奨しています。

対象 命名規約 名前の例
パッケージ名 全て小文字の短い名前にする。アンダースコアを使うのは推奨しない。 urllib
モジュール名 全て小文字の短い名前にする。読みやすさのために、アンダースコアで単語を区切ってもよい。 request
クラス名 CapWords方式とする。 Request
型変数名 CapWords方式とし、短い名前にする。 T、Num、AnyStr
例外名 CapWords方式とし、名前の最後に"Error"を付けます。 URLError、ContentTooShortError
グローバル変数名 頭にアンダースコアを付ける。モジュール内限定であり、外部非公開であることを明示。 _opener
関数名 小文字のみになります。読みやすくなるなら、アンダースコアを使っても構わない。 urlopen
変数名 小文字のみになります。読みやすくなるなら、アンダースコアを使っても構わない。 opener
メソッド名 小文字のみになります。読みやすくなるなら、アンダースコアを使っても構わない。 geturl、info
インスタンス変数 小文字のみになります。読みやすくなるなら、アンダースコアを使っても構わない。 req
定数 単語をアンダースコアで区切ります。 MAXFTPCACHE、CONTENT_HEADERS

Pythonの命名規約についてはPEP 8で記載されているので詳しく確認したい場合は参考にして下さい。

PEP 8: Python コードのスタイルガイド - 命名規約

PEP 3131: Supporting Non-ASCII Identifiers - Policy Specification

 

タイトルとURLをコピーしました