eyecatch thumbnail

Python PEP8 命名規則

Profile picture
ルッチ / Lucci
2020.12.23

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__ を使って全て宣言すること.

内部インタフェースは名前の前にアンダースコアを一つつけること.


おわりに

親ページに戻る

最後までお読みいただきありがとうございました.


愛用品


関連記事


Python 初学者へのお知らせ

約2時間で Python の基礎を学び、簡単なゲームを作ってみませんか?

そんな方に、Python の基本を実践的に学びたい人向けの講座、【無料】ゼロから始めるPythonプログラミング入門講座(週4開催)をお勧めします。

tech-ad-techgym-python

この講座で、無料でゲーム開発を通してプログラミングの基礎を身につけてみませんか?

少しでも気になった方は、上記のテキストリンクもしくは画像リンクから申し込みお願いします!

Python との楽しい日々をお過ごしください:)

大学生へのお知らせ

ここまで記事を読んでくれて本当に嬉しいです、ありがとうございます。

プログラミングを始めたばかりの頃って「やるぞ!」という気持ちは強めですが、 実際に取り組み始めると「何からどうやってどこまでやればいんだ?」 という感じで羅針盤を失うことが多いような気がします。(実体験)

そんな勉強熱心で向上心高めなんだけど目指す姿が曖昧な大学生の方に感謝の意も込めて、就職活動までサポートするプログラミングスクール「レバテックカレッジ」を紹介します。↓

Levtech-college

「自走力」のあるエンジニアを最短3ヶ月で目指せるカリキュラムが月額30,000円で用意されていて、 現段階の「目指す姿が曖昧で何から手をつければいいかわからない状態」から脱却できます。

自分は実際にIT企業で働いていますが、「自走力」のあるエンジニアの方にはいつも助けられています。

なので、目指す姿が曖昧な人はとりあえずレバテックカレッジが導いてくれる 「自走力のあるエンジニア」を目指してみるのはスタートダッシュとしてはアリです。

レベルアップしてからジョブチェンするのはRPGでも常套手段ですし、 レバテックカレッジで一通りのスキルを習得してから自分の目指す姿を再定義するといいかもです。

「自走力のあるエンジニア」って実際どんなエンジニアなの? 何から手をつければいいかわからないから教えて欲しい、 という人は上のテキストリンク/画像リンクから「無料相談会」への申し込みをお願いします。

よきエンジニアライフを!