モジュールのPython命名規則


102

「nib」というクラスを定義することを目的としたモジュールがあります。(およびいくつかの関連クラスも。)モジュール自体をどのように呼び出す必要がありますか?「ニブ」?「nibmodule」?他に何か?

回答:


110

ちょうどペン先。クラスにNibという名前を付け、大文字のNを付けます。命名規則とその他のスタイルのアドバイスの詳細については、PythonスタイルガイドのPEP 8を参照してください。


2
ほとんどのPythonプロジェクトはこの規則に従っていますか?私は、ビルトインクラス小文字である、例えば、リスト、文字列、などに気づくので
ラムRachum

4
組み込みタイプが正しいことを確認します。ただし、これらは明らかに例外です。標準ライブラリで定義されている他のほとんどのクラス大文字です。
Stephan202 2009

2
これは正しい慣習だと思いましたが、それには固有の問題があり、少なくとも私には思えます。Clientたとえば、というクラスがあるとしますclient。当然のことながら、呼び出したいクラスのインスタンスを作成することがよくあります。しかし、あなたの慣習によれば、モジュール名はになるclientので、インスタンスには常にのような不自然な名前を付ける必要がありますclient_instance。この問題についてどう思いますか?
Ray

3
@Rayしかし、規則がモジュールに名前を付けるClientことだったとすると、それはクラス名と衝突しClientます。3つの名前付けバリアント(clientClientまたはCLIENT)しかないため、インスタンス、クラス、モジュール、または定数の2つの間には常に衝突が生じます。モジュールにインスタンスまたは定数と同じ名前を付けるのはクラスよりも少ないので、他の可能性のより良い命名規則だと思います。また、通常は変数ではなくクラスと定数をインポートするため、モジュールからのインポートが読みやすくなります。
Ted Klein Bergman、

2
ビルトインが小文字である理由は、それらがPythonではなくCで実装されていることを意味します。
Har

41

私はそれをnib.pyと呼びます。そして、私はまた、クラスをニブと名付けます。

私が取り組んでいるより大きなpythonプロジェクトでは、基本的に1つの重要なクラスを定義する多くのモジュールがあります。クラスの名前は大文字で始まります。モジュールは小文字のクラスのように命名されます。これにより、次のようなインポートが行われます。

from nib import Nib
from foo import Foo
from spam.eggs import Eggs, FriedEggs

これは、Javaの方法をエミュレートするようなものです。ファイルごとに1つのクラス。しかし、柔軟性が追加されたので、理にかなっていれば、常に別のクラスを1つのファイルに追加できます。


27

私のソリューションはpythonicの観点からあまり人気がないことを知っていますが、1つのモジュール-> 1つのクラスのJavaアプローチを使用し、モジュールをクラスとして指定します。私はpythonスタイルの背後にある理由を理解していますが、多くのクラスを含む非常に大きなファイルを持つことはあまり好きではありません。折りたたみにもかかわらず、閲覧するのは難しいと思います。

もう1つの理由はバージョン管理です。大きなファイルがあることは、コミットがそのファイルに集中する傾向があることを意味します。これにより、解決すべき競合の数が増える可能性があります。また、コミットが特定のファイルを変更する(したがって、特定のクラスが関係する)追加のログ情報を失います。代わりに、どの変更が行われたかを理解するためのコミットコメントのみを含む、モジュールファイルへの変更が表示されます。

まとめると、もしあなたがpythonの哲学を好むなら、他の投稿の提案に行ってください。代わりにjavaのような哲学を好む場合は、クラスNibを含むNib.pyを作成します。


1
上記の問題は、言語やプログラミングスタイルではなく、エディターの制限とバージョン管理ツールの使用が原因で発生します。ファイルごとに1つのクラスは、コード構造にとって有害で​​す。spyderまたは同様のエディタを使用して、ナビゲーションを支援するクラスの概要と、両方で同じファイルが開いている2つのペインを表示します。また、PEP8もお読みください。PythonはPythonを記述し、JavaはJavaを記述しますが、PythonはJavaを記述するためのものではありません
Ioannis Filippidis 2015

5
@IoannisFilippidis:モジュールのすべてのクラスを、通常管理するコードサイズの単一ファイルに配置する必要がある場合、ファイルを開くことさえできず、他の同僚との衝突が急増し、上司が私の中で唾を吐くそれを提案するための顔(比喩的に、それだけです)。単一ファイルのアプローチは、PEP-8であるかどうかにかかわらず、スケーリングしません。
Stefano Borini、2015

2
@StefanoBorini:PEP8は単一ファイルアプローチを要求しません。モジュールごとに1つのクラスと(コード単位)ごとに1つのファイルは、非常に広いスペクトルの両極端です。モジュールごとに1つのファイルがあり、管理できないほど大きなファイルサイズが表示される場合は、パッケージをモジュールに分割するアプローチを修正することを検討してください。
Chintalagiri Shashank 2015

22

ペン先は結構です。疑問がある場合は、Pythonスタイルガイドを参照してください。

PEP 8から:

パッケージとモジュールの名前モジュールは、すべて小文字の短い名前にする必要があります。読みやすさを向上させる場合は、モジュール名にアンダースコアを使用できます。Pythonパッケージも短く、すべて小文字の名前にする必要がありますが、アンダースコアの使用はお勧めしません。

モジュール名はファイル名にマッピングされ、一部のファイルシステムでは大文字と小文字が区別されず、長い名前が切り捨てられるため、モジュール名はかなり短くなるように選択することが重要です-これはUnixでは問題になりませんが、コードが古いバージョンのMacまたはWindows、またはDOSに転送された場合の問題。

CまたはC ++で記述された拡張モジュールに、より高いレベル(たとえば、よりオブジェクト指向)のインターフェースを提供するPythonモジュールが付属している場合、C / C ++モジュールの先頭にはアンダースコア(_socketなど)があります。


1
ええと...これは私をお腹にぶつけます。私は完全に異なる何かのためにパッケージ/モジュールでアンダースコアのプレフィックスを使用しています(モンティpythonリファレンスが意図されています)。
Stefano Borini、

0

PEP-8から:パッケージ名とモジュール名

モジュールには、すべて小文字の短い名前を付ける必要があります。読みやすさを向上させる場合は、モジュール名にアンダースコアを使用できます。

Pythonパッケージも短く、すべて小文字の名前にする必要がありますが、アンダースコアの使用はお勧めしません。

CまたはC ++で記述された拡張モジュールに、より高いレベル(たとえば、よりオブジェクト指向)のインターフェースを提供するPythonモジュールが付属している場合、C / C ++モジュールの先頭にはアンダースコア(_socketなど)があります。


-3

Pythonのfooモジュールは、JavaのFooクラスファイルと同等です。

または

Pythonのfoob​​arモジュールは、JavaのFooBarクラスファイルと同等です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.