29

クラス定義を見るclass Foo:と、大文字で始まることがよくあります。

しかし、リスト[]や dict{}やその他の組み込み型もクラスではありませんか? さらに言えば、Python の IDLE に入力されたものはすべて (Windows のバイナリ ディストリビューションで) 自動的に紫色に色分けされるキーワードであり、それ自体がクラスですよね?

そのようなspam = list()

spamのインスタンスになりましたlist()

list = list()だから私の質問は、おそらく誰もそれをしないのに、なぜ Python はまず最初に何かをすることを可能にするのかということです。しかしまた、なぜそうではないのかlist = List()

言語の開発者は、ほとんどの Python プログラマーがクラスにそのような名前を付けているのに、いかなる種類の規則も使用しないことに決めたのでしょうか?

4

5 に答える 5

40

Yes, uppercase-initial classes are the convention, as outlined in PEP 8.

多くの組み込み型がこの規則に従っていないことは正しいです。これらは、ユーザー定義のクラスと組み込み型の間にはるかに大きな違いがあった Python の初期段階からの名残です。ただし、C で記述された組み込み型または拡張型は、小文字の名前を持つ可能性が高いようです (たとえば、numpy.arrayではありませんnumpy.Array)。

それにもかかわらず、規則では、Python コード内の独自のクラスには大文字の頭文字を使用します。

于 2013-02-20T06:59:53.790 に答える
3

PEP8は、コード スタイルに最適な場所です。

list = list()が有効である理由に関する質問に対処するには、list単にグローバル名前空間の名前であり、他の変数と同様にオーバーライドできます。

于 2013-02-20T06:58:52.600 に答える
2

あなたの質問に対する完全な答えを本当に知っているのはBDFLだけだと思います。C で実装されている型以外の規則では、大文字を使用することは間違いありません (PEP8 で詳しく説明されています)。ただし、興味深いことに、すべてのC レベルの型が規則に従っているわけではありません (つまりPy_TruePy_False)。はい、それらは Python レベルの定数ですが、すべてPyTypeObjects です。それが唯一の違いであり、したがって慣習の違いであるかどうか知りたいです。

于 2013-02-20T06:56:50.093 に答える
0

Python 開発者向けの優れたガイドラインであるPEP 8によると、次のようになります。

ほとんど例外なく、クラス名は CapWords 規則を使用します。内部使用のクラスには、先頭にアンダースコアが追加されています。

PEP 8 は、メインの Python ディストリビューションの標準ライブラリの Python 開発を対象としていますが、従うべき賢明なガイドラインです。

于 2013-02-20T06:58:34.930 に答える