如何通过Python的__new__方法实现单例模式?

2026-05-05 08:430阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计651个文字,预计阅读时间需要3分钟。

如何通过Python的__new__方法实现单例模式?

介绍 init 方法init 方法通常用于在初始化一个类实例时调用,但它并非实例化一个类的第一步调用。当使用 Student(id, name) 这样的表达式实例化一个类时,首先被调用的是 init 方法。

介绍

init 方法通常用在初始化一个类实例时候,但其实它不是实例化一个类的时候第一个被调用 的方法。当使用 Student(id, name) 这样的表达式来实例化一个类时,最先被调用的方法 其实是 new 方法。

new方法接受的参数虽然也是和init一样,但init是在类实例创建之后调用,而 new方法正是创建这个类实例的方法。

new为对象分配空间,是内置的静态方法,new在内存中为对象分配了空间也返回了对象的引用,init获得了这个引用才初始化这个实例。

如何通过Python的__new__方法实现单例模式?

示例

一个非常简单的单例

class A: instance = None def __new__(cls, *args, **kwargs): if cls.instance is None: cls.instance = super().__new__(cls) return cls.instance

因为new方法是一个静态方法(也就是在定义的时候就没有cls参数),所以在这里要传入一个cls参数,而且这里的new你改造过了,所以要返回爸爸的new方法。

阅读全文
标签:操作介绍

本文共计651个文字,预计阅读时间需要3分钟。

如何通过Python的__new__方法实现单例模式?

介绍 init 方法init 方法通常用于在初始化一个类实例时调用,但它并非实例化一个类的第一步调用。当使用 Student(id, name) 这样的表达式实例化一个类时,首先被调用的是 init 方法。

介绍

init 方法通常用在初始化一个类实例时候,但其实它不是实例化一个类的时候第一个被调用 的方法。当使用 Student(id, name) 这样的表达式来实例化一个类时,最先被调用的方法 其实是 new 方法。

new方法接受的参数虽然也是和init一样,但init是在类实例创建之后调用,而 new方法正是创建这个类实例的方法。

new为对象分配空间,是内置的静态方法,new在内存中为对象分配了空间也返回了对象的引用,init获得了这个引用才初始化这个实例。

如何通过Python的__new__方法实现单例模式?

示例

一个非常简单的单例

class A: instance = None def __new__(cls, *args, **kwargs): if cls.instance is None: cls.instance = super().__new__(cls) return cls.instance

因为new方法是一个静态方法(也就是在定义的时候就没有cls参数),所以在这里要传入一个cls参数,而且这里的new你改造过了,所以要返回爸爸的new方法。

阅读全文
标签:操作介绍