如何在 Python 类中表示受保护的方法?
Posted
技术标签:
【中文标题】如何在 Python 类中表示受保护的方法?【英文标题】:How to represent protected methods in Python classes? 【发布时间】:2016-08-26 08:28:42 【问题描述】:阅读this question on method ordering,我想到了将受保护的方法放在哪里以及它们在Python中应该是私有的_method(self)
还是公共的method(self)
。我知道 Python 没有为受保护的方法提供语言特性。
私有:按照惯例,以下划线开头的属性是私有的。它们通常仍然可以从外部访问,但不应该。用下划线开头的受保护方法感觉很奇怪,因为不清楚子类实际上覆盖了方法,而不是声明了自己的实现细节。
Public: 如果没有下划线,则更有可能有人会查看基类以查看该方法是否已经存在。因此,这对于子类化的人来说更好。但是,想要使用子类的人并不知道该方法只是一个实现细节,可能会尝试从外部调用它。
在 Python 中定义受保护方法的首选方法是什么?
【问题讨论】:
另见 Why are Python's 'private' methods not actually private? 正如 Guido 所说:“我们都是同意的成年人”。 【参考方案1】:只需使用以下划线开头的名称。
受保护的方法是您希望与子类共享的实现细节,因此此类方法不是公共 API 的一部分。任何不属于公共 API 的内容最好使用初始下划线命名。
换句话说,“受保护”应该与“私人”一样对待。受保护的方法只需要以具有严格隐私模型的语言存在,其中将此类实现细节设为私有将排除与子类共享此类方法。 Python没有这样的问题。
无论你做什么,不要使用前导双下划线;此类名称被视为类私有,并被命名为定义它们的类(编译器通过在前面添加前缀_ClassName
对其进行重命名),以确保子类不会意外覆盖它们。
【讨论】:
以上是关于如何在 Python 类中表示受保护的方法?的主要内容,如果未能解决你的问题,请参考以下文章