专栏首页BigYoung小站Python类中的__new__和__init__的区别

Python类中的__new__和__init__的区别

在写Python类时,或者看某些项目源码时,总是见到__init____new__方法,一直没有深入研究两者的区别,今天聊聊这个。

__new__

__new__是类(class)方法。

class新创建实例时,会调用__new__,它主要控制一个新实例的创建。

需要知道的是,__new__是实例创建的第一步。首先调用它,再由它负责返回类的新实例。

通常,__new__除非您要继承不可变类型(如str,int,unicode或tuple),否则不必重写。

针对__new__的用法,举个栗子:

依照Python官方文档的说法,__new__方法主要是当你继承一些不可变的class时(比如int, str, tuple), 提供给你一个自定义这些类的实例化过程的途径。还有就是实现自定义的metaclass。

首先我们来看一下第一个功能,具体我们可以用int来作为一个例子:假如我们需要一个永远都是正数的整数类型,通过集成 int,我们可能会写出这样的代码。

但运行后会发现,结果根本不是我们想的那样,我们任然得到了-3。这是因为对于int这种 不可变的对象,我们只有重载它的__new__方法才能起到自定义的作用。这是修改后的代码:

通过重载__new__方法,我们实现了需要的功能。

__init__

__init__是实例方法。

class调用__init__时,是对这个class生成的新实例初始化,初始化的内容,就是__init__内定义的内容。

每新创建一个实例,实例都会初始化这些内容,这些内容都是初始化给新创建的实例,跟class无关。

__init__不返回任何东西。创建实例后,它仅负责初始化实例,且仅在需要初始化某些内容时,才会进行调用。

参考文档:https://stackoverflow.com/questions/674304/why-is-init-always-called-after-new https://www.cnblogs.com/shenxiaolin/p/9307496.html

本文分享自微信公众号 - BigYoung小站(bigyoungs),作者:Young文人

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 图片验证码怎么写?

    如有一天,你需要写一个图片验证码,这篇文章就派上用场了,以下直接上代码,代码中会有详细的注释

    BigYoung小站
  • Python 如何随机打乱列表(List)排序

    现在有一个list:[1,2,3,4,5,6],我需要把这个list在输出的时候,是以一种随机打乱的形式输出。

    BigYoung小站
  • Python 如何随机打乱列表(List)排序

    现在有一个list:[1,2,3,4,5,6],我需要把这个list在输出的时候,是以一种随机打乱的形式输出。

    BigYoung小站
  • 【已解决】mas_updateConstraints更新约束引起的约束冲突

    79DF33F7-1626-4FFD-9B01-1B115617F764

    君赏
  • ML工作流程(第5部分) - 特征预处理

    我们已经讨论了ML工作流程的前四个步骤。到目前为止,我们通过DICTR(离散化,积分,清理,转换,还原)对原始数据进行预处理,然后采用特征提取的方式将数据转化为...

    人工智能资讯小编
  • Avtiviti工作流规范 BPM与BPMN

    进过长时间的轮转,重拾Activiti,因为最近在智联上看到多家公司的需求上写的,都要熟悉工作流引擎,也就是activiti所以重拾

    彼岸舞
  • nagios 3.X pnp-0.4.3

    nagios 3.X pnp-0.4.3 配置小记 作者:刘宇 liuyu.blog.51cto.com 配置环境:cetnos5 apache2 nagi...

    py3study
  • 5. 小项目之Face_detection

    想做的是这么一个东西:识别视频(或者摄像头获得的实时视频)中的人脸,并判断是谁(因为数据采集的原因,找了身边的5个朋友采集了一些数据),如果不是这几个人,标记为...

    和蔼的zhxing
  • 应用:商品需求预估

    假设现在有这么一个人,23岁,一线城市白领,常常出入城市CBD,之前没有任何的平台行为,刚刚注册app,那么他会买什么?

    sladesal
  • 揭秘手术台革命者达芬奇机器人,它何时平民化?

    她和意大利文艺复兴时期鼎鼎有名的天才达·芬奇同名,她也拥有“三头六臂”,她的手比绣花女还要灵活,在外科手术方面,她更拥有着精湛的造诣。她是一台名叫“达芬奇”的手...

    机器人网

扫码关注云+社区

领取腾讯云代金券