派生クラスに名前を付けるPythonの方法

私は派生のためのより受け入れやすい命名規則が何であるか分かりません クラス。たとえば、基本クラス Fruit があるとします。このクラスから、appleクラス、 オレンジとパッションフルーツ。基本クラスの名前を クラス名の冒頭または末尾に表示する必要がありますか?

FruitApple FruitOrange FruitPassionFruit または AppleFruit OrangeFruit PassionFruitFruit

3
おそらく他の人は同意しないかもしれませんが、私は Apple Orange PassionFruit で行きます。クラス名の目的は、実装の詳細を列挙するのではなく、それが何であるかのアイデアを与えることです。さらに、 OrangeFruit CitrusFruit から派生していると判断した場合、その名前をどこでも OrangeCitrusFruit に変更する必要はありません。
追加された 著者 James,
あなたは本当に gtk.ColorSelectionDialog と思いますか? gtk.ColorSelectionDialogWindowBinContainerWidgetObject に名前を変更する必要がありますか? :)
追加された 著者 Sven Marnach,
AppleFruit Fruit は情報を追加していないように見えるかもしれませんが、実際のユースケースは果実を伴わず、複数のクラス階層が横並びに存在する必要があります。 :-)時々おもちゃの例がより複雑なソフトウェアに適用される良い汎用ルールにつながることはありません。
追加された 著者 Raymond Hettinger,
@SvenMarnach:ノン! ObjectWidgetContainerBinWindowDialogSelectionColor そうの方がはるかに優れています。
追加された 著者 Petr Viktorin,
"それは基本クラスの名前は、派生したものに現れなければならないというコンセンサスです..." - 本当ですか?それは多くの場合、確かに意味がありますが、私はそれが不可欠ではないと思います。 AppleFruit Fruit は情報を追加しません。 FruitPassionFruit は特に凶悪です。また、これまでのところ、より大きな階層でしかこれを行うことはできません。すべてのクラス名に object を含めないでください。
追加された 著者 delnan,

3 答え

常識を使います。

あなたの例では、他の人が議論しているように、 Fruit の部分は明らかに冗長です。 Apple Orange などを使用してください。代わりに別の例を使用してみましょう。

Plugin という基本クラスがある場合は、「フォーマットするプラグイン」として読み込んだ派生クラス FormattingPlugin の名前を付けます。代わりの PluginFormatting は、 "プラグインのフォーマット"と読みます。私は読書が主観的だと思うので、あなた自身の最善の判断を使用してください。 果物の例とは異なり、それはクラスが何をしているかについての完全な説明ではないので、単に書式設定という名前にしないでください。

5
追加された
+1非常に良い例!
追加された 著者 delnan,

「コンセンサス」は理解できない概念です。しかし、あなたができることは、標準ライブラリで使われている命名規則を見て、Pythonコミュニティ内の標準が何であるかを知ることです。

For example, here's one extensive list of related classes and subclasses: http://docs.python.org/library/internet.html

しかし、最終的には、ユーザにとって最も明瞭なクラス名が最良の名前であるという原則に基づいた味覚の問題である。

4
追加された

上に挙げた具体例では、誰もが果物だと知っているので、サブクラス名に Fruit を含める必要はないと思います。

より一般的には、あなたが選んだものは一貫していれば問題ありません。

私は後でオブジェクトを命名するフランス語の方法と記述子(形容詞)を好む傾向があるので、私が選択しなければならない場合は、 FruitApple FruitOrange などを AppleFruit OrangeFruit (および冗長な PassionFruitFruit :))アルファベット順にリストされている場合、クラスター内のすべてのサブクラスを表示するという利点もあります。これは一部のIDEやコード補完者にとって役に立ちます。

一方、標準ライブラリをモデルとして使用する場合は、 SpecificBase 形式でサブクラスの名前を付けることができます。例えば、ロギングモジュールは、 StreamHandler FileHandler Handler のサブクラスとして定義します。

1
追加された
すべてのサブクラスを表示するのは、名前が一意でなくなるまでさらにタイプしなければならないということです。
追加された 著者 Petr Viktorin,