如何在Python类中表示受保护的方法?

时间:2016-05-01 14:32:53

标签: python oop inheritance protected

阅读this question on method ordering,我想到了在哪里放置受保护的方法,以及它们是否应该是Python中的私有_method(self)或公共method(self)。我知道Python没有为受保护的方法提供语言功能。

  • 私有:按照惯例,以下划线开头的属性是私有的。它们通常仍然可以从外部访问,但不应该从外部访问。使用下划线启动受保护的方法会感觉很奇怪,因为不清楚子类实际上是否覆盖了方法,而不是声明自己的实现细节。

  • 公开:如果没有下划线,有人会更有可能看一下基类,看看该方法是否已存在。因此,对于子类化的人来说这更好。但是,想要使用子类的人不知道该方法只是一个实现细节,可能会尝试从外部调用它。

在Python中定义受保护方法的首选方法是什么?

1 个答案:

答案 0 :(得分:2)

只使用以单个下划线开头的名称。

受保护的方法是您要与子类共享的实现详细信息,因此此类方法不是公共API的一部分。任何不属于公共API的东西都以最初的下划线命名。

换句话说,'protected'应该被视为与'private'相同。受保护的方法只需要存在于具有严格隐私模型的语言中,其中将此类实现细节设为私有将阻止与子类共享此类方法。 Python没有这样的问题。

无论你做什么,使用领先的下划线;这些名称被认为是 class private ,并且被命名为定义它们的类(它们由编译器通过前缀_ClassName重命名),以确保子类不会意外地覆盖它们