2011-11-24 65 views
3

我不明白什么是派生的 类更可接受的命名约定。假设我们有一个基类Fruit,从中我们可以推出苹果类, 橙和百香果。基础类别的名称应该出现在 派生的名称中,但是它应该出现在类名称的开头还是末尾?Pythonic的方法来命名派生类

哪个更Python:FruitAppleFruitOrangeFruitPassionFruitAppleFruitOrangeFruitPassionFruitFruit

+7

“这是共识,基类的名称应该出现在派生的...” - 真的吗?当然,在很多情况下它是有道理的,但我认为这不是必要的。 AppleFruit中的'Fruit'没有添加任何信息。 “FruitPassionFruit”特别残酷。此外,您只能在较大的层次结构中采用此方法。你没有在你的所有课程名称中包含“对象”,是吗? – delnan

+1

也许其他人会不同意,但我只会与'Apple','Orange'和'PassionFruit'一起去。该类名称的目的是为了了解它的功能,而不是列出实现细节。此外,如果您决定'OrangeFruit'应该来自'CitrusFruit',那么您不需要在任何地方都将它重命名为'OrangeCitrusFruit'。 – James

+1

你真的认为['gtk.ColorSelectionDialog'](http://developer.gnome.org/pygtk/stable/class-gtkcolorselectiondialog.html)应该重命名为'gtk.ColorSelectionDialogWindowBinContainerWidgetObject'吗? :) –

回答

5

使用常识。

在你的例子中,正如其他人所讨论的那样,Fruit部分显然是多余的。只需使用Apple,Orange等。让我们考虑使用另一个例子。

如果我有一个名为Plugin的基类,我会将派生类FormattingPlugin命名为“插入格式”。替代方案PluginFormatting的内容为“格式化插件”。我想这个阅读是主观的,所以请用你自己的最佳判断。 但是不要只命名它Formatting,因为,不像水果的例子,这不是一个足够完整的类描述。

+0

+1非常好的例子! – delnan

1

在上面列出的具体示例中,每个人都知道这些东西都是水果,所以我认为没有必要在子类名称中包含Fruit

更一般地说,只要它是一致的,无论你选择什么都很好。

我往往喜欢先和描述符(形容词)命名的对象之后的法国方式,所以如果我不得不选择,我宁愿FruitAppleFruitOrange,等过AppleFruitOrangeFruit(和冗余PassionFruitFruit :) )。它还具有按字母顺序显示集群中的所有子类的优势,这可能有助于某些IDE或代码完成者。

另一方面,如果您将标准库作为模型,您会发现SpecificBase格式的命名子类的首选项。例如,日志记录模块将StreamHandlerFileHandler定义为Handler的子类。

+2

显示所有子类的另一方面是,必须键入more,直到名称是唯一的,并且可以制表符完成它。 –

4

“共识”是一个难以捉摸的概念。你可以做的是看标准库中使用的命名约定,以了解Python社区中的标准。

例如,这里有一个广泛的相关类和子类的列表:http://docs.python.org/library/internet.html

在虽然结束,它是遵循的原则口味的问题是这是最清晰的用户类名是最好的名。