30 lines
1.8 KiB
Markdown
30 lines
1.8 KiB
Markdown
### 访问可见性问题
|
||
|
||
对于上面的代码,有C++、Java、C#等编程经验的程序员可能会问,我们给`Student`对象绑定的`name`和`age`属性到底具有怎样的访问权限(也称为可见性)。因为在很多面向对象编程语言中,我们通常会将对象的属性设置为私有的(private)或受保护的(protected),简单的说就是不允许外界访问,而对象的方法通常都是公开的(public),因为公开的方法就是对象能够接受的消息。在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的,如果希望属性是私有的,在给属性命名时可以用两个下划线作为开头,下面的代码可以验证这一点。
|
||
```Python
|
||
class Test:
|
||
|
||
def __init__(self, foo):
|
||
self.__foo = foo
|
||
|
||
def __bar(self):
|
||
print(self.__foo)
|
||
print('__bar')
|
||
|
||
|
||
def main():
|
||
test = Test('hello')
|
||
# AttributeError: 'Test' object has no attribute '__bar'
|
||
test.__bar()
|
||
# AttributeError: 'Test' object has no attribute '__foo'
|
||
print(test.__foo)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main()
|
||
```
|
||
|
||
### 面向对象的支柱
|
||
|
||
面向对象有三大支柱:封装、继承和多态。后面两个概念在下一个章节中进行详细的说明,这里我们先说一下什么是封装。我自己对封装的理解是"隐藏一切可以隐藏的实现细节,只向外界暴露(提供)简单的编程接口"。我们在类中定义的方法其实就是把数据和对数据的操作封装起来了,在我们创建了对象之后,只需要给对象发送一个消息(调用方法)就可以执行方法中的代码,也就是说我们只需要知道方法的名字和传入的参数(方法的外部视图),而不需要知道方法内部的实现细节(方法的内部视图)。
|