Contents
はじめに
どうも,たける@typememo です.
Python PEP8 命名規則についてです.
命名規則
実践されている命名規則はこんな感じらしい.
b
(小文字1文字)B
(大文字1文字)lowercase
lower_case_with_underscores
UPPERCASE
UPPER_CASE_WITH_UNDERSCORES
CapitalizedWords
(CamelCase)
e.g.)HttpServerError
よりHTTPServerError
の方が良い.mixedCase
Capitalized_Words_With_Underscores
(醜いからやめた方がいい)_single_leading_underscore
(内部でだけ使う)single_trailing_underscore_
(Python のキーワードとの衝突を回避)__double_leading_underscore
(クラスの属性に名前をつけるとき)__double_leading_and_trailing_underscore__
(ユーザーが制御する名前空間に存在する “マジック”オブジェクト または “マジック”属性)
こんな名前は嫌だ
- 単一の
l
(小文字のエル)O
(大文字のオー)I
(大文字のアイ) は 0 と 1 と区別がつかない
パッケージとモジュールの名前
- モジュール: 全て小文字の短い名前,アンダースコア利用可能
- パッケージ: 全て小文字の短い名前,アンダースコア利用非推奨
クラスの名前
- クラス:
CapWords
形式を使うべし
ただし,Python に組み込まれているクラスは単一の単語
(または2つの単語が混ざったもの)
の命名規則に従っている.
例外的に CapWords
形式のクラスや変数もあるが.
型変数の名前
- 型変数:
CapWords
形式を使うべし,短い名前にすべし
共変や反変の振る舞いをする変数を宣言するときに _co
や _contra
を変数末尾につけると良い.
from typing import TypeVar
VT_co = TypeVar('VT_co', covariant=True)
KT_contra = TypeVar('KT_contra', contravariant=True)
例外の名前
例外はクラスであるべきなので クラスの命名規則 を適用すると良い.
例外の名前の最後には Error
をつけるべき.
グローバル変数の名前
(ここで言う “グローバル変数” は “モジュールレベルのグローバル変数” と言う意味)
(ここで示す規約は関数レベルのグローバル変数に対しても適応できる)
グローバル変数をエクスポートするのを防ぐために __all__
の仕組みを使う.
もしくは,エクスポートしたくないグローバル変数の頭に _
(アンダースコア) を付ける.
関数や変数の名前
関数の名前と変数の名前は全て小文字を使う.
必要に応じて単語をアンダースコアで区切るべし.
すでに mixedCase
がすでに使われている場合は互換性を保つために mixedCase
を使う.
関数やメソッドに渡す引数
インスタンスメソッドの第一引数の名前は 常に self
を使う.
クラスメソッドの第一引数の名前は 常に cls
を使う.
関数の引数名が python の予約語と衝突していたら末尾にアンダースコアを付ける.
e.g.) class_
は ok.短縮系の clss
とかはやめた方がいい.
メソッド名とインスタンス変数
関数の命名規則と同じく,全て小文字を使い必要に応じてアンダースコアで区切るべし.
公開されていないメソッドやインスタンス変数にだけ,先頭にアンダースコアを付ける.
サブクラスと名前が衝突したら,先頭にアンダースコアを2つ付ける.
定数
定数はモジュールレベルで定義すること.
名前は全て大文字を使い,必要に応じてアンダースコアで区切る.
継承の設計
属性を公開するかどうかいつも決めるようにすべし.
よくわからないなら非公開にしておくべし.
属性 … クラスのメソッドやインスタンス変数
感想:
ちょっと,この “継承の設計” で展開されている話に全くついていけなかった. python をそんな使いこなしているわけではないから話についていけなかったのかな. そもそもクラスのこときちんと理解しているわけではないので, それも話についていけなかった理由の一つかな.
公開インタフェースと内部インタフェース
公開インタフェースは __all__
を使って全て宣言すること.
内部インタフェースは名前の前にアンダースコアを一つつけること.
おわりに
最後までお読みいただきありがとうございました.
愛用品
- Xiser Pro Trainer (ステッパー)
- HHKB Professional 墨 (キーボード)
- HHKB キートップセット 白 (キートップ)
- Apple Magic Mouse 2 (マウス)
- Apple MacMini (PC)
- iiyama Display 27inch FullHD (ディスプレイ)
- KINTO UNITEA 550ml (コップ)