第三模块 面向对象
2019-07-15 12:20:52 4 举报
AI智能生成
登录查看完整内容
Python3 面向对象知识点
作者其他创作
大纲/内容
第三模块 面向对象
概念
面向过程:
概念:核心是过程二字,过程是指解决问题的步骤,设计一条流水线,机械式的思维方式
优点:复杂的问题流程化,简单化,编程复杂度底,入手简单
缺点:每变更一个步骤有可能所有步骤都要改,可扩展性差
使用场景:一次写完很少扩展需求的脚本,如:监控脚本、部署脚本等
面向对象:
概念:核心是对象二字,对象就是特征与技能的结合体,上帝视角思维
优点:可扩展性强
缺点:编程复杂度高
使用场景:用户需求经常变化,如:互联网应用、游戏、企业内部应用
三大特征:Encapsulation封装、Inheritance继承、Polymorphism多态
类class:
就是一系列相似的特征与技能的结合体 (站在不同的角度,得到的分类是不一样)
在现实世界中:一定先有对象,才有类
在程序中:一定要先定义类,后调用类来产生对象
对象:特征与技能的结合体
类属性查找顺序: 对象本身 -> 生成对象的类 -> 父类
分类
经典类:在python2中,没有显式的继承object类的类,以及该类的子类,都是经典类
新式类:在python2中,显式地声明继承object的类,以及该类的子类,都是新式类; 在python3中,无论是否继承object,都默认继承object,即python3中所有类均为新式类
子/派生类:继承父类新建的类
超类:有了类的类(父类也称超类)
抽象类:抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化,主要用于规束其子类实现其定义的抽象方法
继承:就是类与类之间什么'是'什么的关系
查看继承:
__base__只查看从左到右继承的第一个类
__bases__查看所有继承的父类
单继承: 继承一个父类
多继承:继承多个父类
重用父类方法属性的方式
1、指名道姓(不依赖继承): ParentClass.method,ParentClass.attribute
2、super()(依赖继承):根据起始生成对象的类的mro()列表顺序去各个类里面找要重用的属性与方法
组合:就是类与类之间什么'有'什么的关系
定义:组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合
实现:Class1.user = Class2
多态:一类事物具有多种形态
多态性:是指在不考虑实例类型的情况下使用实例(动态绑定)
动态多态性
静态多态性
多态性好处:
1.增加了程序的灵活性; 使用者都是同一种形式去调用,如func(animal)
2.增加了程序额可扩展性; 创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用
鸭子类型:Python崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子
封装:
用法:在python中用双下划线开头的方式将属性隐藏起来(设置成私有的)如:__name
特点:
1、类中定义的__x只能在内部使用,如self.__x,引用的就是变形的结果。
2、这种变形其实正是针对外部的变形,在外部是无法通过__x这个名字访问到的
问题:
1、这种机制也并没有真正意义上限制我们从外部直接访问属性,知道了类名和属性名就可以拼出名字:_类名__属性,然后就可以访问了,如a._A__N
3、在继承中,父类如果不想让子类覆盖自己的方法,可以将方法定义为私有的
把一些属性隐藏起来,只让类内部访问,隐藏起来然后对外提供操作该数据的接口
特性property: 是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值
类中定义的函数分类:
一、绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入)
1、绑定到类的方法:用classmethod装饰器装饰的方法
2、绑定到对象的方法:没有被任何装饰器装饰的方法
二:非绑定方法:用staticmethod装饰器装饰的方法
1、不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已
反射:通过字符串映射到对象的属性
内置方法:
item系列:让类的属性以字典的形式操作obj['key']
__str__: 改变对象的字符串显示: 在print(obj)时执行
__del__: 在变量内存地址回收前执行,用于一个程序的收尾工作,如文件的关闭操作f.close
元类:元类是类的类,是类的模板,type默认是所有自定义类的元类
0 条评论
回复 删除
下一页