广告位联系
返回顶部
分享到

python __init__与 __new__的区别

python 来源:互联网 作者:佚名 发布时间:2023-02-26 16:18:23 人浏览
摘要

一、构造函数 __init__ 与__new__ __new__ 作用: 创建对象,并分配内存 __init__ 作用: 初始化对象的值 注意: 1、与java相比,java只有一个构造器。而python __new__ 方法与 __init__ 方法 组合,才

一、构造函数 __init__ 与__new__

__new__   作用: 创建对象,并分配内存

__init__ 作用: 初始化对象的值

注意:

1、与java相比,java只有一个构造器。而python  __new__  方法与 __init__ 方法 组合,才能称为一个对应类似于java中的构造器 

2、先执行__new__ ,创建对象,并分配内存.

再执行 __init__,初始化对象的值。

3、任何类都继承于object 类。

我们一般不重写__new__ 方法。 我们不重写,就默认调用父类 的 __new__ 方法。

4、__new__ 方法 ,一定要return 一个对象。 如果自己重写__new__ 方法,但是没有return出一个对象。连对象都没创建成功,后面是不会进行初始化对象的。

例子1:

1

2

3

4

5

6

7

8

9

10

11

12

class Person(object):

    def __init__(self,name,id,sex):

        self.name = name

        self.id = id

        self.sex = sex

        print("初始化对象的值")

  

    def __new__(cls, *args, **kwargs):

        print("开始创建对象,并分配内存")

  

if __name__ == '__main__':

    p = Person("张三",12,"男")

运行结果,只执行了__new__ 方法,并没有执行 __init__方法。

为啥呢? 因为new函数,没有返回一个 对象。

正确的用法

1

2

3

4

5

6

7

8

9

10

11

12

13

14

class Person(object):

    def __init__(self,name,id,sex):

        self.name = name

        self.id = id

        self.sex = sex

        print("初始化对象的值")

  

    def __new__(cls, *args, **kwargs):

        print("开始创建对象,并分配内存")

        self = super().__new__(cls)

        return self

  

if __name__ == '__main__':

    p = Person("张三",12,"男")

打印结果:

开始创建对象,并分配内存
初始化对象的值


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/qq_39208536/article/details/129174087
相关文章
  • 用Python绘制一个仿黑洞图像

    用Python绘制一个仿黑洞图像
    黑洞图像大家都知道,毕竟前几年刚发布的时候曾火遍全网,甚至都做成表情包了。 问题在于,凭什么认为这就是黑洞的照片,而不是一个
  • python __init__与 __new__的区别
    一、构造函数 __init__ 与__new__ __new__ 作用: 创建对象,并分配内存 __init__ 作用: 初始化对象的值 注意: 1、与java相比,java只有一个构造器
  • 基于Python实现绘制一个足球

    基于Python实现绘制一个足球
    前情提要 如果想优雅地绘制一个足球,那首先需要绘制正二十面体:用Python绘制正二十面体 其核心代码为 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1
  • 关于keras中卷积层Conv2D的学习记录

    关于keras中卷积层Conv2D的学习记录
    keras中卷积层Conv2D的学习 关于卷积的具体操作不细讲,本文只是自己太懒了不想记手写笔记。 由于自己接触到的都是图像 处理相关的工作,
  • pycharm中执行.sh文件的方法

    pycharm中执行.sh文件的方法
    背景 在运行神经网络相关的实验的时候,通常要跑很多次实验,而每次实验运行时间很久,每运行完一次就需要手动再运行下一次实验。(
  • pycharm2022.2远程连接服务器调试代码实现

    pycharm2022.2远程连接服务器调试代码实现
    目的: 同步本地和服务器的全部或者部分文件 本地debug,服务器跑实验 需要条件: 服务器上已经创建好虚拟环境 你本地已经安装好pychar
  • numpy.unique()使用方法介绍
    numpy.unique() 函数接受一个数组,去除其中重复元素,并按元素由小到大返回一个新的无元素重复的元组或者列表。 1. 参数说明 1 numpy.unique
  • JWT的原理及使用
    目录JWT的原理及使用一、什么是JWT?二、签发认证流程三、使用方法1.设置登录接口2.设置过期事件3.定制返回格式4.配置认证类和权限类5.写
  • NumPy迭代数组的实现的介绍
    NumPy中引入了 nditer 对象来提供一种对于数组元素的访问方式。 一、单数组迭代 1. 使用 nditer 访问数组的每个元素 1 2 3 4 5 6 7 8 9 10 11 12 13 1
  • python批量翻译excel表格中的英文
    需求背景 女朋友的论文需要爬取YouTube视频热评,但爬下来的都是外文。 主要设计 读取一个表格文件,获取需要翻译的文本 使用百度翻译
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计