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