强私有方法和属性在其名称的开头具有双下划线。这导致它们的名称被损坏,这意味着它们不能从类外部访问。
这样做的目的不是确保它们保持私有,而是避免如果存在具有相同名称的方法或属性的子类,则避免错误。
__privatemethod的方法仍然可以从外部访问,但可以用不同的名称访问。
Spam 类的私有方法可以用_Spam__方法进行外部访问。
class Spam:
__egg = 7
def print_egg(self):
print(self.__egg)
s = Spam()
s.print_egg()
print(s._Spam__egg)
print(s.__egg)
结果:
>>>
7
7
AttributeError: 'Spam' object has no attribute '__egg'
>>>
基本上,Python通过在内部更改名称以包含类名来保护这些成员。