擅长:python、mysql、java
<p>Python具有封装——您正在类中使用它。</p>
<p>它没有的是访问控制,比如私有和受保护的属性。但是,在Python中,有一个属性命名约定,通过在属性前面加上一个或两个下划线来表示私有属性,例如:</p>
<pre><code>self._a
self.__a
</code></pre>
<p>单个下划线向类的用户指示,属性应被视为该类的私有属性,而不应直接访问。</p>
<p>双下划线表示相同,但是,Python将对属性名进行某种程度的篡改,以试图隐藏它。</p>
<pre><code>class C(object):
def __init__(self):
self.a = 123 # OK to access directly
self._a = 123 # should be considered private
self.__a = 123 # considered private, name mangled
>>> c = C()
>>> c.a
123
>>> c._a
123
>>> c.__a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'C' object has no attribute '__a'
>>> c._C__a
123
</code></pre>
<p>在上一个示例中,您可以看到名称已从<code>__a</code>更改为<code>_C__a</code>,尽管它在类中仍然可以作为<code>self.__a</code>访问。</p>