面向对象之封装

Posted on 2019-03-02 12:41  杜卡迪S11  阅读(100)  评论(0编辑  收藏  举报

一、如何看隐藏

在python中使用双下划线开头的方式将属性隐藏起来,(设置成私有的属性,确保外界无法访问)

注:这只是一种变形操作仅仅只在类定义阶段发生形变

二、封装

  就是把什么东西装到容器中封闭起来

  与隐藏有相似之处,但不是单纯的隐藏

  官方解释:对外部隐藏实现的细节,并提供简单的使用接口

  例:一辆小汽车,我们只需要知道怎么去使用方向盘和刹车油门,不需要知道它们具体的实现细节,所以厂家将它们封装在汽车盖子内部,值提供了简单的方向盘,刹车和油门。这个就是封装的意思。

  封装的好处:

  1、提高了安全性,封装了关键的数据来实现

  2、隔离了复杂度,封装了内部的实现方法(逻辑方法),只提供简单的接口给外界使用

 

python中的属性访问权限:

  1、公开的(默认)在任何地方都能访问到

  2、私有的,仅在内部可以使用

 

使用特殊的语法进行封装

  给要隐藏的变量名前面加上两个下划线__使其变成私有的

 

封装的原理:

  Python是通过变形的方式来完成私有化操作

  具体方法:在双下划线开头的名字前面加上_类名

在默认情况下子类无论是内部还是外部都不能访问父类的私有属性,当然是可以强行访问的。

 

访问器和设置器

  私有属性,外界无法使用就失去了意义

  我们可以定义访问方法和设置方法,这个就称为访问器和设置器

设置器:

  1.提供对私有属性的访问和修改

  2.增加额外的判断

property装饰器:

  访问和修改私有属性的写法与普通属性的写法不一致,对于使用而言更复杂

  使用property装饰器可以将一个方法伪装成一个普通的属性,这样对于使用者而言,使用起来方法就一直了。

  @property的弊端是不能增加额外的参数,只能有一个self,即定义时自己本身。self英文翻译就是自己的意思。

  访问器 @property是在访问属性时触发

  设置器 @属性名称.settler用来设置属性时触发

  删除器 @属性名称 .deleter用del删除属性时触发

 

接口:

  interface接口是一组功能的集合体

  其好处是提高了程序的扩展性

  接口用于定义一组功能,后续的程序只要按照接口来进行实现就能被使用

  我们可以将接口理解成一套规范

 

抽象类:抽象指的是不具体,不清晰

  如果一个方法没有实现体,那么这个方法就称为抽象方法

  如果一个类中存在抽象方法,那么这个类就称为抽象类

抽象类的作用:

  用于提高扩展性的,与接口相似也可以作为一套规范

  抽象类比接口强大的地方在于可以强行限制子类必须实现父类中声明的方法

特点:抽象类无法直接实例化,只能由子类继承后覆盖所有抽象方法才能实例化对象

抽象类具体定义方法:

  import abc

  class 类名(metaclass = abc.ABCMeta):

    @abc.abstractmethod

    def 函数名(self):

      pass