Python并不直接支持私有方式,而要靠程序员自己把握在外部进行特性修改的时机。毕竟在使用对象前应该知道如何使用。但是,可以用一些小技巧达到私有特性的效果。
为了让方法或者特性变为私有(从外部无法访问),只要在它的名字前面加上双下划线即可:
In [6]: class Secretive:
def __inaccessible(self):
...: print "Bet you can't see me..."
现在__inaccessible从外界是无法访问的,而在类内部还能使用访问:
1 In [8]: s = Secretive()
2
3 In [9]: s.__inaccessible()
4 ---------------------------------------------------------------------------
5 AttributeError Traceback (most recent call last)
6
7 /home/skyhacker/<ipython console> in <module>()
8
9 AttributeError: Secretive instance has no attribute '__inaccessible'
尽管双下划线有些奇怪,但是看起来像是其他语言中的标准的私有方法。真正发生的事情才是不标准的。类的内部定义中,所有以双下划线开始的名字都被“翻译”成前面加上单下划线和类名的形式。
在了解了这些幕后的事情后,实际上还是能在类外访问这些私有方法,尽管不应该这么做:
In [10]: s._Secretive__inaccessible()
Bet you can't see me...
简而言之,确保其他人不会访问对象的方法和特性是不可能的,但是这类“名称变化术”就是他们不应该访问这些函数或者特性的强有力信号。