Python中的__new__()方法
1、__new__()至少要有一个参数cls,代表当前类,此参数在实例时由python解释器自动识别, 2、__new__()必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,
可以 return父类new出来的实例,
如:return super().__new__(cls),或者直接return object.__new__(cls) 3、init有一个参数self,就是这个__new__()方法返回的实例,
可以完成一些其它初始化的动作,init不需要返回值(有返回值就会报错) 4、如果__new__()创建的是当前类的实例,会自动调用__init__()函数,
通过return语句里面调用的__new__(cls)函数的第一个参数是cls来保证是当前类实例,
如果是其他类的类名,那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__()函数,也不会调用其他类的__init__()函数。
如下示例:
class A(object):
def __init__(self):
print('这是init方法:',self) def __new__(cls, *args, **kwargs):
print('这是cls类本身的ID:',id(cls))
print('这是new方法:',object.__new__(cls))
# print('这是new方法:',super().__new__(cls)) # 跟上面那句本质一样,都是调用父类的new方法
return object.__new__(cls) A()
print('这是A类的ID:',id(A)) '''
输出结果如下:
这是cls类本身的ID: 2790056212288
这是new方法: <__main__.A object at 0x000002899CB281C0>
这是init方法: <__main__.A object at 0x000002899CB281C0>
这是A类的ID: 2790056212288
'''
示例具体图解如下:

通过new方法实现单例:
'''
__new__实现 ---> 通过调用类方法实例化对象时,自动触发的__new__来实现单例
''' class Aoo(object):
_instance = None def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = object.__new__(cls) return cls._instance a1 = Aoo()
a2 = Aoo()
# print(a1 is a2) # True
Python中的__new__()方法的更多相关文章
- Python中的__new__()方法与实例化
@Python中的__new__()方法与实例化 __new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python 中 存在于类里面的构造方法__init__ ...
- Python中的__new__()方法的使用
__new__() 函数只能用于从object继承的新式类. 先看下object类中对__new__()方法的定义: class object: @staticmethod # known cas ...
- 通俗的讲解Python中的__new__()方法
2020-3-17更新本文,对本文中存争议的例子进行了更新! 曾经我幼稚的以为认识了python的__init__()方法就相当于认识了类构造器,结果,__new__()方法突然出现在我眼前,让我突然 ...
- 关于python中的__new__方法
在上篇中,简单的比较了下new方法和init方法,然后结合网上的东西看了一点,发现..看书有的时候说的并不全面. __new__方法是一个类方法,主要作用是来指导如何生成类的实例, 主要用于,当需要生 ...
- python 中的__new__方法
1.有关__new__方法的介绍 __new__方法调用在构造方法构造实例之前,即在__init__方法执行之前,我们可以这样理解,他的作用是决定是否适用这个__iint__方法来构造实例,但是需要注 ...
- Python3中的__new__方法以及继承不可变类型类的问题
最近在学到Python中的__new__方法时被弄懵逼了,一开始实在是很难理解,有很多地方想不通(本人强迫症).最近自己慢慢思索得出了能说服自己的理解: 说__new__方法之前要先提到__init_ ...
- 第8.6节 Python类中的__new__方法深入剖析:调用父类__new__方法参数的困惑
上节<第8.5节 Python类中的__new__方法和构造方法__init__关系深入剖析:执行顺序及参数关系案例详解>通过案例详细分析了两个方法的执行顺序,不知大家是否注意到了,在上述 ...
- Python中的__new__和__init__
Python中的__new__和__init__ 写了这么多的class,现在才知道还有个__new__方法, 那么它和__init__有什么区别呢? class TestCls(): "& ...
- 一个案例深入Python中的__new__和__init__
准备 在Python中,一切皆对象. 既然一切皆对象,那么类也是对象,我们暂且称之为 类对象.来个简单例子(本篇文章的所有案例都是运行在Python3.4中): class foo(): pass p ...
- python中的replace()方法的使用
python中的replace()方法的使用 需求是这样的:需要将字符串的某些字符替换成其他字符 str.replace(old,new,max) 第一个参数是要进行更换的旧字符,第二个参数是新的子串 ...
随机推荐
- dfs学习笔记
题目链接 可以通过参考一道例题来加深对dfs的认知和学习 题意描述 按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数 字序列中不允许出现重复的数字. 输出格式 ...
- 探究BrainSplit-集群脑裂
本篇文章将会以redis集群为例,分享在主从集群中会导致数据丢失的一个问题:BrainSplit-集群脑裂 1.什么是集群脑裂 所谓的脑裂,就是指在主从集群中,同时有两个主节点,它们都能接收写请求.而 ...
- Codeforces Round #845 (Div. 2) and ByteRace 2023 A-D
Codeforces Round #845 (Div. 2) and ByteRace 2023 A-D A. Everybody Likes Good Arrays! 题意:对给定数组进行操作:删除 ...
- Java基础学习笔记-数据类型、数制
数据类型,跟JS感觉差异不是很大,但是有个String不是很一样的样子 数据类型分为 基本数据类型和复合数据类型 基本数据类型分为下面三种 数值类型 1.整数类型:byte,short,int,lon ...
- windows11预览版装WSA心得
这两天心血来潮想要装个WSA(安卓windows子系统),原来一直用的安卓模拟器(mumu啊蓝叠啊逍遥啊),但感觉像wsa这种安卓系统与主系统融合的模式更带感,于是开始了我艰苦的安装(瞎捯饬)之路 我 ...
- Google Cloud Spanner 究竟是什么?
谷歌于2017年推出的Google Cloud Spanner,原是谷歌内部使用的一个数据服务,后来又成为了谷歌云平台上搭建的数据库服务. Google Cloud Spanner 是一种数据库,它结 ...
- 关于integer数据对比的问题
先看案例 Integer c1 = 127; Integer c2 = 127; c1 == c2; //true Integer d1 = 128; Integer d2 = 128; d1 == ...
- [USACO17JAN]Cow Dance Show S更新ing
这道题目是二分舞台大小,为什么能用二分呢?因为如果mid成立 则mid~r都成立,如果mid不成立l~mid就都不成立,也就是严格单调,所以可以使用二分快速找到k. check函数的思路: 实现:在舞 ...
- 通过Nacos配置刷新进行RabbitMQ消费者在线启停
前提 公司在做一些金融相关业务,某些时候由于数据提供商定期维护或者特殊原因需要暂停某些服务的消费者.之前选用的消息队列技术栈是RabbitMQ,用于微服务之间的消息投递,对于这类需要暂停消费者的场景是 ...
- 深度优先搜索算法-dfs讲解
迷宫问题 有一个迷宫: S**. .... ***T (其中字符S表示起点,字符T表示终点,字符*表示墙壁,字符.表示平地.你需要从S出发走到T,每次只能向上下左右相邻的位置移动,不能走出地图,也不能 ...