Encapsulation

封装

维基百科的介绍

在面向对象程序设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函数接口的实现细节部分包装、隐藏起来的方法。同时,它也是一种防止外界调用端,去访问对象内部实现细节的手段,这个手段是由编程语言本身来提供的。 适当的封装,可以将对象使用接口的程序实现部分隐藏起来,不让用户看到,同时确保用户无法任意更改对象内部的重要数据。它可以让代码更容易理解与维护,也加强了代码的安全性。

自己的理解

简单来说,封装有两个优点

  1. 隐藏方法的具体实现细节,只提供给调用方调用方法的接口。(简化代码量)
  2. 可以将属性方法私有化,就是将类或者函数中的某些属性、方法限制在内部区域之内,外部无法调用。(提高安全性)
class Person(object):
    def __init__(self):
        self.me = 'Da'
        self.__name = 'LotusChing'

    def __python(self):
        return 'I love Python.'

    def go(self):
        print('Which language do you like?')
        return self.__python()

    @property
    def name(self):
        return self.__name

if __name__ == '__main__':
    p = Person()
    print(p.go())
    print(p.name)
    p.__python

输出

Which language do you like?
Traceback (most recent call last):
I love Python.
  File "F:/Python/Learn Through/oop1.py", line 23, in <module>
LotusChing
    p.__python
AttributeError: 'Person' object has no attribute '__python'

可以看到封装生效了,只有go方法通过内部才能调用__python方法

访问私有属性是通过@property,将方法转换为属性,然后将私有属性返回出来

results matching ""

    No results matching ""