目录
一、init和new方法
1、new方法的作用
2、重写new方法
3、总结
4、init和new的区别
二、单例模式
1、单例模式的作用
2、实现单理模式的方法
3、通过__new__实现单例模式
4、通过装饰器实现单例模式
一、init和new方法
init其实不是实例化对象后最先调用的方法,最先调用的是new方法。
实例化对象后代码执行的步骤:
类名(),实例化对象时,python解释器首先会调用new方法,为对象分配空间,然后再执行init初始化对象。
1、new方法的作用
- 在内存中为对象分配空间
- 返回对象的引用
python解释器获得对象的引用后,将引用作为第一个参数,传递给init方法
2、重写new方法
返回对象引用的方式:
- 父类名.方法名(cls)
- super().方法名(cls)
3、总结
- init方法是什么时候被自动调用?实例化的时候。
- new方法是用来创建对象,new方法是从哪里来的?new方法是从objec中来的。
- self里面是什么?self代表实例化对象本身,它是new方法创建的,然后发送给init使用。
执行步骤:
一个对象的实例化过程,先执行new方法,如果没有写new,默认调用object中的new方法,返回一个实例化对象,然后再调用init方法,对这个对象进行初始化。
4、init和new的区别
- new方法,创建对象;init方法,初始化对象。
- new方法,返回对象引用;init方法,定义实例属性。
- new方法,是类级别的方法;init方法,是实例级别的方法。
二、单例模式
单例模式:是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。
1、单例模式的作用
- 一个特殊的类,这个类只能创建一次实例
- 实例化不同的对象,内存地址不同
- 单例模式可以节省空间,实例化不同对象会产生不同的内存地址,造成浪费资源。
2、实现单理模式的方法
- 通过@classmethod
- 通过装饰器实现
- 通过__new__实现
- 通过导入模块时实现
下面演示分别通过__new__方法和装饰器实现单例模式:
3、通过__new__实现单例模式
4、通过装饰器实现单例模式
理解部分:
实现部分: