Pythonには 「PEP8: Pythonコードのスタイルガイド」があって、変数名や関数名などの命名規則も書いてあります。
命名規則やコーディングスタイルを合わせることで、ソースコードを読んでくれる人たち、レビューしてくれる人たちの負担を下げることができます。
PEP8の命名規則だけでなく「リーダブルコード」に書かれている命名方法も参考にしましょう。
PEP8
用途 | 命名規則 |
---|---|
非公開 | 先頭にアンダースコアを1個つける (外部からアクセス可能だけど、アクセスしないルール・約束事) 他言語のprotected属性に相当 サブクラスでオーバライドできる 関数・メソッド内のローカル変数は元々非公開なのでアンダースコアをつけない |
サブクラスでの名前衝突回避 | 先頭にアンダースコアを2個つける (クラス名を付与した名前て外部からアクセス可能) 他言語のprivate属性に相当 サブクラスで同じ名前をつけてもクラス毎に別々のインスタンス変数として持てる |
特殊プロパティ、特殊メソッド | 前後にアンダースコアを2個つける (言語仕様で用意されているので自分で新規定義しないこと) |
予約語や組込み関数名と衝突回避 | 最後にアンダースコアを1個つける |
インスタンスメソッドの第一引数 | 常に self
|
クラスメソッドの第一引数 | 常に cls
|
用途 | 命名規則 |
---|---|
パッケージ(ディレクトリ名) | 全て小文字の短い名前、アンダースコアは使わない |
モジュール(ファイル名) | 全て小文字の短い名前、アンダースコアで区切ってもよい |
クラス、例外 | CapWords方式 (先頭だけ大文字の単語を繋げる、アンダースコアは使わない) |
関数、メソッド | 小文字のみ、必要に応じて単語をアンダースコアで区切る |
定数 | 大文字のみ、単語をアンダースコアで区切る 通常、モジュールレベル(関数の外側)に書く |
変数、引数 | 小文字のみ、必要に応じて単語をアンダースコアで区切る |
1文字変数 |
l (小文字のエル)、O (大文字のオー)、I (大文字のアイ) は決して使わない (フォントによって数字の 1 、0 と見分けがつかないため) |
PEP8以外
用途 | 命名規則 |
---|---|
不使用変数 | アンダースコア1個 (forループや分割代入で変数が必要だけど使わない場合) |
リーダブルコード
- 単語は省略しない(慣例的に省略して使われている名前はOK)
- 名前に情報・意味を込める(flag, check では何のフラグか、何をチェックしたどんな値か分からない)
- 名前で情報を伝えてコメント不要にする(コメントにはwhatではなくwhyを書く)
- 1文字変数は1画面で見渡せる範囲(25行以内)で使い終わる一時変数に使う
など。