概念:是一种编程思想
核心概念:对象和类
对象是实际存在的具体技能和属性的结合体
类是具备相同属性的和技能对象的集合体,是一种抽象概念
计算机中先有类
优点:
扩展性强
缺点:
编程复杂度高,无法准确预支执行结果
使用场景:
对扩展要求比较高
类的方法
对象绑定方法 默认 对象调用时会自动传入对象本身
类绑定方法 类和对象调用都会传入类本身@classmethod
非绑定方法 就是一个普通函数 不会自动传参@staticmethod
名称空间和查找顺序
类也有自己的名称空间
对象也有自己独立的名称空间 每个对象之间都是独立的
用对象可以访问到类中的内容
每个对象不同的就放到对象自己的名称空间 大家都一样放到类中
顺序: 对象---》类---》父类---》obj---》元类
初始化方法:
用于给对象的属性附上初始值,或做一些其他的初始化操作
会在调用类的时候自动执行,并传入对象本身
必须保证返回值为None
万物皆对象
自带的数据类型也是某个类
三大特性:封装、继承、多态
封装
封装:对外部隐藏内部实现细节,提供调用的接口
目的:保证数据安全,隔离复杂度
getter setter deleter
@property == getter
@属性名称 .setter
@属性名称 .deleter
封装的原理,在读取类中代码时,会将带有双下划线的名字换成__类名__属性这样的格式
继承
继承是一种关系,类与类之间,描述什么是什么的关系
通过继承,子类可以直接用父类已经存在的内容
派生
在继承的基础上,子类出现了父类不存在的内容
覆盖 overwrite
子类中出现了父类中一模一样的名字
抽象
老师类 姓名 年龄 性别
学生类 姓名 年龄 性别
两者看似相似,但不会父子类
抽象就是抽取多个子类相同的部分,形成一个新的公共父类
python支持多继承 增加了灵活性,但是带来了不确定性
确定是否是菱形继承
如果是新式类 广度优先 经典类 深度优先
使用方式:
-
抽象
-
继承已经存在的类 扩展新功能
抽象类
当一个类中存在抽象方法时,类是抽象类
抽象方法:如果一个方法只有声明,没有实现
作用:用于强制要求子类必须实现里面某些方法
抽象类就是为了更好的编写多态性的代码
接口
与抽象类不同之处在于,接口的所有方法都应该只有声明而没有实现体的
抽象类中可以有普通方法也可以有抽象方法
子类访问父类的内容
super().父类的名称
super(子类名称,self).名称
组合
也是一种关系 描述的是什么是什么的关系
继承和组合都是为了提高代码的复用性
多态
一种事物具备多种形态、
多个不同类型的对象可以相应一个方法的调用
不是一直特殊的语法,只要实现了多个不同类型的对象可以相应一个方法调用,那就称之为多态性
面向对象的扩展
反射
通过字符串来操作对象的属性和方法
反省 指对象可以在创建后动态的修改自身的属性和方法
hasatter setattr getattr delattr
反射框架设计的基石
元类
类也是对象
用于创建类的类就是元类
默认所有的类的元类都是type
我们可以继承type实现自己的元类
目的就是为了控制类的创建过程
__call__ 调用类实例化对象时 自动执行
__init__ 创建类对象的时候执行
__new__ 创建对象时,会调用__new__来获得一个空对象,然后调用类中__init__方法进行初始化
单例模式
一个类只能产生一个对象