阅读this question on method ordering,我想到了在哪里放置受保护的方法,以及它们是否应该是Python中的私有_method(self)
或公共method(self)
。我知道Python没有为受保护的方法提供语言功能。
私有:按照惯例,以下划线开头的属性是私有的。它们通常仍然可以从外部访问,但不应该从外部访问。使用下划线启动受保护的方法会感觉很奇怪,因为不清楚子类实际上是否覆盖了方法,而不是声明自己的实现细节。
公开:如果没有下划线,有人会更有可能看一下基类,看看该方法是否已存在。因此,对于子类化的人来说这更好。但是,想要使用子类的人不知道该方法只是一个实现细节,可能会尝试从外部调用它。
在Python中定义受保护方法的首选方法是什么?
答案 0 :(得分:2)
只使用以单个下划线开头的名称。
受保护的方法是您要与子类共享的实现详细信息,因此此类方法不是公共API的一部分。任何不属于公共API的东西都以最初的下划线命名。
换句话说,'protected'应该被视为与'private'相同。受保护的方法只需要存在于具有严格隐私模型的语言中,其中将此类实现细节设为私有将阻止与子类共享此类方法。 Python没有这样的问题。
无论你做什么,不使用领先的双下划线;这些名称被认为是 class private ,并且被命名为定义它们的类(它们由编译器通过前缀_ClassName
重命名),以确保子类不会意外地覆盖它们