目录

一、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方法

init python 类属性 python类init执行方法_实例化

2、重写new方法

返回对象引用的方式:

  • 父类名.方法名(cls)
  • super().方法名(cls)

init python 类属性 python类init执行方法_学习_02

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__实现单例模式

init python 类属性 python类init执行方法_单例模式_03

4、通过装饰器实现单例模式

理解部分:

init python 类属性 python类init执行方法_python_04

实现部分: 

init python 类属性 python类init执行方法_实例化_05