博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
day26
阅读量:4678 次
发布时间:2019-06-09

本文共 1734 字,大约阅读时间需要 5 分钟。

封装

封装就是对外部隐藏内部的属性 以及实现的细节并对外部提供使用的接口 使用者无序知道结果是怎么得到的

封装有隐藏的意思 但不是单纯的隐藏 还是需要通过接口给外部使用的

封装的的好处 提高内部数据的安全性  隔离复杂度 通过接口外部使用起来更加简单

 

 

类中 对对象的属性可以进行封装 在初始化对象是 通过在对象属性前加上__对对象属性进行封装

类中 对绑定方法进行封装 可以在函数名前加上__

被封装的属性或者方法 只能在类内部被访问 就算有继承关系 也只能访问到本类的 访问不到父类的封装属性和对象

 

如果外部需要访问类内部的封装属性 可以通过类中 定义接口方法来给外部使用接口函数可以加一定的逻辑来 外部只需要调用内部的接口函数

如果外部需要修改内部的封装属性 可以通过类中定义修改属性的接口来给外部使用 在接口函数中可以一定的逻辑 外部也只要调用修改的接口来修改内部属性

当然一般类中被封装的属性 一般就是不让外部直接修改的 所以才会被封装起来

python是通过变形的方式来实现封装的 如果属性被封装 他会自动在属性前加上_类名 而这个_类名是被隐藏的

property

是将类中的一个方法伪装成属性

当我们通过对象调用接口的时候 就是对象调用函数 我们可以通过property来伪装成对象查看自己的属性

比如对象中的某一个属性是通过计算得到的 属性的值是不断的变化的 此时我们就需要调用方法来计算这个值

当我们使用property装饰器 我们调用函数 就会伪装成 对象查看自己的属性 这样外部使用者更加清晰 我只是查看的一个属性 而不是调用方法

多态性

多态指的多个不同类对方可以相应同一个方法并产生不同的结果

多态 某种事物具备多个不同的形态

水 气态 液态 固态   动物  人 狗 ? 

其实归根结底他都是同一类 属于基类 他们都继承于基类 他们都应该有基类的方法 所以基类下面的子类可以使用基类的方法 也可以拥有基类的相同方法 

多态的带来的好处:

    只需要学习基类中的使用方法即可, 不需要关心具体的哪一个类 以及实现的   以不变应万变   提高了灵活性
    提高扩展性

 
    如果没有多态  需要分别学习 person  cat pig 的不同使用方法 这对于使用者而言太麻烦了
如何实现多态:
 鸭子类型 就是典型的多态 多种不同类型 使用方法一样

 

常用的内置函数

类中的__str__     该方法在object中有定义 默认行为 返回对象类型以及地址  <__main__.Person object at 0x0000016F450C7390>     在将对象转为字符串时执行     注意:返回值必须为字符串类型     子类可以覆盖该方法来完成 对打印内容的自定义

  

__del__ 当对象被删除前会自动调用 该方法 声明时候会删除对象?     1.程序运行结束 解释器退出 将自动删除所有数据     2.手动调用del 时也会删除对象 注意:该函数不是用来删除对象的 使用场景 当你的对象在创建时,开启了不属于解释器的资源 例如打开了一个文件 必须保证当对象被删除时 同时关闭额外的资源  如文件 也称之为析构函数  构造 的反义词     构造 指的是从无到有     析构 值从有到无     简单的说就对象所有数据全部删除

反省

面向对象中的反省 指的是,一个对象必须具备,发现自身属性,以及修改自身属性的能力;  

一个对象在设计初期,可能考虑不够周全后期需要删除或修改已经存在的属性, 和增加属性

反射就是通过字符串来操作对象属性

 

动态导入模块

"""

直接写import 或者from import  称之为静态导入  建立在一个基础上:提前已经知道有这个模块
动态导入  指的是  在需要的任何时候 通过指定字符串类型的包名称来导入需要的模块
import importlib
mk = importlib.import_module(m_name)
mk 即导入成功的模块
"""
该方式常用在框架中 因为框架设计者不可能提前预知后续需要的模块和类

 

转载于:https://www.cnblogs.com/huikejie/p/10895825.html

你可能感兴趣的文章
sublime text 设置
查看>>
javascript 设置cookie(转)
查看>>
xftp Initialize Flexnet Service failed / Error code: 50003
查看>>
【软件技巧】Sublime Text为不同语法定义不同高亮
查看>>
iframe的滚动栏问题:显示/隐藏滚动栏
查看>>
reactor模式:单线程的reactor模式
查看>>
Pair_Work Project
查看>>
单例设计模式
查看>>
Django Class Based View
查看>>
tcp 拥塞控制机制
查看>>
python学习笔记(十五)-异常处理
查看>>
路径+DataRow+SqlPara防止sql注入
查看>>
Internet History, Technology and Security (Week5.1)
查看>>
MySQL查询in操作 查询结果按in集合顺序显示_Mysql_脚本之家
查看>>
解释型语言与编译型语言
查看>>
redis主从复制
查看>>
SQLite之登录注册
查看>>
Linux就该这么学(3)-管道符、重定向与环境变量(学习笔记)
查看>>
asm335x系列adc和触摸屏驱动(转)
查看>>
菜鸟nginx源代码剖析数据结构篇(八) 缓冲区链表ngx_chain_t
查看>>