Python 通过修改以两个下划线开头但不以下划线结尾的方法名称来实现伪私有方法。它只是将类名添加到前面。
>>> class Foo(object):
... def __private(self):
... print('secret')
...
>>> dir(Foo)
['_Foo__private', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
注意_Foo__private 方法名称。你可以叫那个名字。
>>> Foo()._Foo__private()
secret
继承让事情变得很奇怪。请注意下面的子类有两个私有方法。子类需要意识到这一点,不要感到惊讶。如果您使用私有方法,您可能会发现您搞砸了从该类继承但仍想使用您的代码的任何人。
>>> class Bar(Foo):
... def __private(self):
... print('secret 2')
...
>>> dir(Bar)
['_Bar__private', '_Foo__private', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
私有方法不是实现者的公共接口的一部分,并且可以随时更改而不会违反公共接口。您可以使用它们,但请注意所有黑客规则都适用。