如何在 Python 类 中表示受保护的方法?
How to represent protected methods in Python classes?
阅读this question on method ordering,我想到了将受保护的方法放在哪里以及它们应该是私有的_method(self)
还是publicmethod(self)
在Python中。我知道 Python 没有为受保护的方法提供语言功能。
Private: 按照惯例,以下划线开头的属性是私有的。它们仍然可以正常地从外部访问,但不应该。使用下划线启动受保护的方法感觉很奇怪,因为不清楚 subclass 实际上覆盖了方法而不是声明其自己的实现细节。
Public: 没有下划线,更有可能有人看一下基数class就知道了该方法是否已经存在。因此,这对于 subclass 的人来说更好。然而,想要使用subclass的人不知道该方法只是一个实现细节,可能会尝试从外部调用它。
在 Python 中定义受保护方法的首选方法是什么?
只需使用以单个下划线开头的名称。
受保护的方法是要与子class共享的实现细节,因此此类方法不属于publicAPI。不属于 public API 的任何内容最好使用首字母下划线命名。
换句话说,'protected' 应该和 'private' 一样对待。受保护的方法只需要存在于具有严格隐私模型的语言中,在这种语言中,将此类实现细节设为私有将阻止与 subclasses 共享此类方法。 Python没有这个问题。
无论你做什么,不要使用前导双下划线;这些名称被认为是 class private 并被命名为定义它们的 class (它们由编译器通过在前面加上前缀 _ClassName
来重命名) , 以确保 subclasses 不会意外覆盖它们。
阅读this question on method ordering,我想到了将受保护的方法放在哪里以及它们应该是私有的_method(self)
还是publicmethod(self)
在Python中。我知道 Python 没有为受保护的方法提供语言功能。
Private: 按照惯例,以下划线开头的属性是私有的。它们仍然可以正常地从外部访问,但不应该。使用下划线启动受保护的方法感觉很奇怪,因为不清楚 subclass 实际上覆盖了方法而不是声明其自己的实现细节。
Public: 没有下划线,更有可能有人看一下基数class就知道了该方法是否已经存在。因此,这对于 subclass 的人来说更好。然而,想要使用subclass的人不知道该方法只是一个实现细节,可能会尝试从外部调用它。
在 Python 中定义受保护方法的首选方法是什么?
只需使用以单个下划线开头的名称。
受保护的方法是要与子class共享的实现细节,因此此类方法不属于publicAPI。不属于 public API 的任何内容最好使用首字母下划线命名。
换句话说,'protected' 应该和 'private' 一样对待。受保护的方法只需要存在于具有严格隐私模型的语言中,在这种语言中,将此类实现细节设为私有将阻止与 subclasses 共享此类方法。 Python没有这个问题。
无论你做什么,不要使用前导双下划线;这些名称被认为是 class private 并被命名为定义它们的 class (它们由编译器通过在前面加上前缀 _ClassName
来重命名) , 以确保 subclasses 不会意外覆盖它们。