面向对象的Python:封装(Encapsulation)
今天继续来谈如何用面向对象的程序设计创建堆栈。在前文中,我们已经介绍了构造器。
我们知道,构造器里面有一个self参数。任何对self参数的修改都会影响新创建的对象。这就是说我们可以给对象添加任意的属性(Property),而且只要对象还存在,这个属性就也会存在,除非手动删除该属性。
接下来,我们给前文的构造器增加一个属性:增加用于存储堆栈的列表stack2_list。请看下面的程序:
对于这段程序,有几点需要说明:
首先,要注意self后面的那个点(self.)。这是Python用来调用对象属性的习俗。也就是说,先写对象的名字(self),加上一个点,然后在加上属性的名字(stack2_list)。
其次,如果在构造器内第一次给属性赋值,即使是空值,那么也创建了该属性。然后,对象就可以使用这个属性。
最后,我们不但创建了堆栈,还创建了stack2_object这个对象,并且利用print()和len()函数检查堆栈的长度。
这段程序的输出结果为:
但是,这并不是我们想要的堆栈!因为我们希望隐藏堆栈,不希望所有人都能看到。那怎么办呢?
简单地讲,这个问题的解决办法就在stack2_list前面加上两个下划线,变成__stack2_list。这样就可以了。来看下面的程序。
这样程序就要报错了。为什么呢?这样很好,我们就是要通过这个错误来说明问题。
如果类里面的任何一个组成部分前面加上两个下划线(__),那么它就由公开变成私有。只有在类内部才可以访问,而不能通过外部访问。这就是Python中的封装(Encapsulation)概念。
运行上面的程序,会得到以下错误信息(右滑看全部):
这里可以看到一个特征错误(AttributeError)。这个错误说my_stack2中没有__stack2_list这个特征,当然其实是有的。
至于怎么解决这个问题,我们下次再说!
免责声明:上述内容仅代表发帖人个人观点,不构成本平台的任何投资建议。


