python中的单下划线与双下划线封装

0 python encapsulation class

我看到在下划线的帮助下,可以在类中声明私有成员,但只要有一个分数,它仍然可以在 main 中访问,但如果有两个分数则不能。如果 2 使变量私有,那么为什么只有 1 呢?单下划线变量的用途/目的是什么?

class Temp:
    def __init__(self):
    self.a = 123
    self._b = 123
    self.__c = 123

obj = Temp()
print(obj.a)
print(obj._b)
print(obj.__c)
Run Code Online (Sandbox Code Playgroud)

sme*_*rkd 5

这就是为什么它是“标准”,与其他语言有点不同。

  1. 没有下划线表示它是公共事物,该类的用户可以触摸/修改/使用
  2. 一个下划线更多的是一种实现细节,通常(注意术语“通常”)应该仅在子类中引用/使用,或者如果您知道自己在做什么的话。python 的美妙之处在于,我们都是成年人,如果有人想要访问某些真正自定义的东西,那么他们应该能够做到。
  3. _Temp__c两个下划线的名称被修改为在幕后包含类名,以防止变量与子类发生冲突。然而,我不会默认为两个,因为这不是一个好习惯,而且通常是不必要的。有关于它的争论和其他帖子,您可以像这样阅读

注意:带下划线或不带下划线的变量/方法没有区别。这只是一个类的约定,不是强制执行的,而是被社区接受为私有的。
注意#2:Matthias 描述了一个非类方法的例外情况