首页 > 编程语言 >python __new__和__init__的区别

python __new__和__init__的区别

时间:2024-10-12 16:50:42浏览次数:8  
标签:__ python 对象 init 实例 new 方法

简介

__new____init__都是Python中的特殊方法,它们在对象生命周期中起到不同的作用。

用法

1、__new__方法:

__new__是一个静态方法,用于创建一个新的对象实例。当你调用一个类时,__new__方法是第一个被调用的方法。它的主要任务是分配内存空间,并返回一个新创建的对象实例。通常情况下,不需要重写__new__方法,因为Python会自动调用object基类的__new__方法来完成实例化过程。但如果你需要控制对象的创建过程,你可以重写__new__方法。

2、__init__方法:

__init__是一个实例方法,用于初始化已创建的对象实例。当__new__方法创建一个对象实例并返回后,__init__方法才会立即被调用。它的主要任务是设置对象的属性和执行其他初始化操作。需要注意的是,__init__方法必须接受一个表示对象实例本身的参数,通常命名为self。通过self参数,可以访问和修改对象的属性。

3、示例:

class Test(object):
    def __new__(cls, *args, **kwargs):
        print("start __new__")
        instance = object.__new__(cls, *args, **kwargs)
        return instance

    def __init__(self, name, age):
        print("start __init__")
        self._name = name
        self._age = age

p = Test("XiaoMing", 12)

输出结果:(先执行输出__new__方法中的,之后才输出__init__的)

start __new__
start __init__

总结

1、__new__方法是静态方法,而__init__是实例方法;

2、__new__方法用于创建对象并返回对象,当返回对象时会自动调用__init__方法进行初始化。

标签:__,python,对象,init,实例,new,方法
From: https://www.cnblogs.com/lanjianhua/p/18460864

相关文章

  • 华为交换机配置-GARP配置
    一.GARP1.前置知识GARP是一种通用属性注册协议,包括GVRP和GMRP两种应用,其中GVRP类似于思科的VTP协议2.注册模式1.Normal模式:允许此端口动态注册,注销vlan,传播动态vlan和静态vlan的信息。最常用的模式2.Fixed模式:禁止此端口动态注册、注销vlan,只传播静态VLAN的信息3.Forbidden......
  • 2024 停课做题总结
    [ABC372D]Buildings思路正着做不方便,倒着用单调栈做一遍就行了。代码#include<iostream>usingnamespacestd;inlineintread(){registerintx=0,f=1;registercharc=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=......
  • 简单的cmake使用
    使用CMakeLists.txt生成可执行文件编写一个最简单的CMakeLists以生成可执行文件,仅需要以下三步指明最小支持的cmake版本cmake_minimum_required指明项目的代号或者说名称project使用add_executable来生成可执行文件其中add_executable参数为可执行文件名称,后面跟着源文......
  • Spring Boot 集成 RabbitMQ 自定义 MessageConverter
    1.SpringBoot集成RabbitMQ自定义消息转换器1.1.版本说明1.2.概述1.3.Spring配置1.4.定义常量1.5.配置交换机和队列1.6.配置ObjectMapper1.7.配置MessageConverter1.8.测试1.SpringBoot集成RabbitMQ自定义消息转换器1.1.版本说明构件版......
  • 洛谷P1102 A-B数对
    A-B数对题目背景出题是一件痛苦的事情!相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的A+BProblem,改用A-B了哈哈!题目描述给出一串正整数数列以及一个正整数\(C\),要求计算出所有满足\(A-B=C\)的数对的个数(不同位置的数字一样的数对算不同的数对)。输入格......
  • SpringBoot2.x 版本集成elasticsearch 8.x(基于elasticsearch-java)
    上次elasticsearch到8.13.3之后,由于springboot版本2.4.13,jdk版本是11,使用springboot内置的ElasticsearchRestTemplate查询的时候做了兼容性之后虽然代码没有报错了,但是每次查询都会有一个警告[WRAN],如果查询比较频繁的时候日志里面看到的全都是这种警告信息:[ignore_throttle......
  • 通过key,获取.properties文件中的值
    news.properties文件:#titletitleNode=/body/div[5]/div[2]/div[3]/h1/span[1]#theYeartheYearNode=/body/div[5]/div[2]/div[1]/span[1]/em#monthAndDaymonthAndDayNode=/body/div[5]/div[2]/div[1]/span[2]#theTimetheTimeNode=/body/div[5]/div[2]/div[1]/span[3]#s......
  • “物品复活”软件开发PSP数据统计表
    “物品复活“软件开发PSP数据统计表PSP2.1具体任务用时Planning计划-Estimate-明确需求和其他相关因素,指明时间成本和依赖关系6hDevelopment开发-Analysis-分析需求5min-DesignSpec-生成设计文档0-DesignReview-设计复审(和同事审......
  • python 实现工厂类方法
    #工厂类方法1,这些类的实例方法名相同classFruit(object):def__init__(self):passdefprint_color(self):pass#工厂类方法2classApple(Fruit):def__init__(self):passdefprint_color(self):print("applei......
  • 【设备漏洞】挖掘思路
    1.信息收集1.1弱口令搜索1.2硬编码问题2.相同组件及OEM框架挖掘2.1组件漏洞问题2.2OEM漏洞问题免责声明本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。文章来源:先知......