回顾
1.组合
一个类产生的对象是另一个对象的属性。
组合是为了减少代码冗余。
2.封装
什么是封装:
特征: 属性属性,即类中的变量
技能: 方法属性, 即类中的函数
把一堆属性(特征与技能)封装一个对象中,对象就好比一个袋子。
封装的目的:
封装的目的是为了可以通过 对象.属性的方式对数据进行存取。
如何封装:
在类内部定义
通过对象.属性的方式添加属性
3.访问限制机制
访问限制机制是什么:
在类内部, 凡是以__开头的属性都不能被类外部“直接”访问,python对其做了变形(隐藏)。
例如: __name ---> _类名__name
访问限制机制目的是什么:
防止使用者在外部对隐私数据进行修改,保证数据安全。
4.property装饰器
用来装饰在类内部的方法中,使该方法不用加括号都可以调用。
5.多态
什么是多态:
同一种事物的多种形态
多态的目的:
让父类定义一套标准,子类遵循父类定义的一套标准。
总结: 为了统一类的编写规范。
如何多态:
- 子类继承父类,遵循父类的标准
- 子类继承抽象类,强制子类必须遵循父类的标准
- 鸭子类性, 所有类都遵循一套鸭子类型标准。
鸭子类型:
只要看起来像鸭子,叫声也是鸭子,那么就是鸭子类型。
在不知道对象具体类型的情况下,拥有相同的方法。
今日内容
classmethod
classmethod是一个装饰器,可以装饰给类内部的方法,是该方法绑定给类使用。
-
对象的绑定方法特殊之处
由对象来调用,会将对象当做第一个参数传给该方法
-
类的绑定方法特殊之处
由类来调用,会将类当做第一个参数传给该方法
使用方法:@
staticmethod
staticmethod是一个装饰器,可以装饰给类内部的方法,使该方法即不绑定给对象,也不绑定给类
使用方法:@
面向对象高阶
__class__
对象的属性,获取该对象当前的类
isinstance
python内置的函数,可以传入两个参数,用于判断参数1是否是参数2的一个实例
issubclass
判断一个类是否是另一个类的子类
反射
指的是通过“字符串”对 对象或类的属性进行操作。
- hasattr: 通过字符串,判断该字符串是否是对象或类的属性。
- getattr: 通过字符串,获取对象或类的属性。
- setattr: 通过字符串,设置对象或类的属性。
- delattr: 通过字符串,删除对象或类的属性。
魔法方法(类的内置方法)
凡是在类内部定义,以__开头__结尾
的方法都称之为魔法方法,又称类的内置方法
会在某些条件成立时触发
__init__: 在调用类时触发。
__str__: 会在打印对象时触发。
__del__: 对象被销毁前执行该方法,该方法会在最后执行。
__getattr__: 会在对象.属性时,“属性没有”的情况下才会触发。
__setattr__: 会在 “对象.属性 = 属性值” 时触发。
__call__: 会在对象被调用时触发。
__new__: 会在__init__执行前触发。
单例模式
指单个实例,实例指的是调用类产生的对象
实例化多个对象会产生不同的内存地址,单例可以让所有调用者在调用类产生对象的情况下都指向同一份内存地址。
从配置文件中获取相同的文件名
目的
为了减少内存的占用