Python使我们能够在类中创建私有方法和变量,方法是在名称前加上双下划线,如下所示:__myPrivateMethod()
。那么,如何解释这一点呢
>>>> class MyClass:
... def myPublicMethod(self):
... print public method
... def __myPrivateMethod(self):
... print this is private!!
...
>>> obj = MyClass()
>>> obj.myPublicMethod()
public method
>>> obj.__myPrivateMethod()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute __myPrivateMethod
>>> dir(obj)
[ _MyClass__myPrivateMethod , __doc__ , __module__ , myPublicMethod ]
>>> obj._MyClass__myPrivateMethod()
this is private!!
怎么回事?!
我会为那些不太明白的人解释一下。
>>> class MyClass:
... def myPublicMethod(self):
... print public method
... def __myPrivateMethod(self):
... print this is private!!
...
>>> obj = MyClass()
我用一个公共方法和一个私有方法创建了一个类,并将其实例化。
接下来,我将其称为公共方法。
>>> obj.myPublicMethod()
public method
接下来,我尝试调用它的私有方法。
>>> obj.__myPrivateMethod()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute __myPrivateMethod
这里一切看起来都不错;我们不能称之为。事实上,这是私人的。事实并非如此。在对象上运行dir()
揭示了一个新的神奇方法,Python为您的所有私有方法神奇地创建了这个方法。
>>> dir(obj)
[ _MyClass__myPrivateMethod , __doc__ , __module__ , myPublicMethod ]
这个新方法的名称总是一个下划线,后跟类名和方法名。
>>> obj._MyClass__myPrivateMethod()
this is private!!
封装就这么多了,嗯?
无论如何,我一直听说Python不支持封装,那么为什么还要尝试呢?什么东西?