python class __new__、__init__、__call__ 区别

在Python中,__new____init____call__ 是三个不同的特殊方法,它们在类的创建和调用过程中扮演着不同的角色。以下是它们的区别和用法:

1. __new__ 方法

  • 作用__new__ 是一个静态方法,负责创建并返回一个新的实例。它是类的构造方法,通常用于定制类的实例化过程。
  • 调用时机:在一个对象实例化时,__new__ 最先被调用,它负责创建实例然后将其传递给 __init__
  • 返回值:必须返回一个实例。
例子:
class MyClass:
    def __new__(cls, *args, **kwargs):
        print("Creating instance")
        instance = super(MyClass, cls).__new__(cls)
        return instance

    def __init__(self, value):
        print("Initializing instance")
        self.value = value

obj = MyClass(10)

输出:

Creating instance
Initializing instance

2. __init__ 方法

  • 作用__init__ 是一个实例方法,用于初始化实例。它不负责创建实例,而是在实例创建之后被调用,用于设置实例的初始状态。
  • 调用时机:在对象实例创建后(即 __new__ 方法返回实例后),自动调用 __init__ 方法。
  • 返回值:没有返回值。
例子:
class MyClass:
    def __init__(self, value):
        print("Initializing instance")
        self.value = value

obj = MyClass(10)

输出:

Initializing instance

3. __call__ 方法

  • 作用__call__ 是一个实例方法,使得类的实例可以像函数一样被调用。
  • 调用时机:当你对一个实例进行“调用”操作时,即使用圆括号 (),就会触发 __call__ 方法。
  • 返回值:可以有返回值,也可以没有,根据实现决定。
例子:
class MyClass:
    def __init__(self, value):
        self.value = value

    def __call__(self, x):
        print(f"Called instance with {x}, value is {self.value}")
        return self.value + x

obj = MyClass(10)
result = obj(5)  # 等同于 obj.__call__(5)
print(result)

输出:

Called instance with 5, value is 10
15

总结

  • __new__:用于创建并返回一个新的实例,在实例化过程中最先被调用。
  • __init__:用于初始化实例,在实例创建之后被调用。
  • __call__:使实例可以像函数一样被调用。

这三个方法分别负责不同阶段的操作,合理使用它们可以更好地控制类的行为和特性。

效果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/666956.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

携手亚马逊云科技,神州泰岳如何打通生成式AI落地最后三公里

导读:神州泰岳成为首批获得亚马逊云科技生成式AI能力认证的合作伙伴。 “过去6年来,在与亚马逊云科技的合作过程中,我们大概签约了300家以上的中国出海企业。”近日在一次沟通会上,神州泰岳副总裁兼云事业部总经理刘家歆这样向媒…

idea中使用maven-helper插件阅读排查【经典版】2

一 maven-helper的使用 1.1 helper页面 打开pom文件,并可以切换tab,简单使用,如下图: Conflicts(查看冲突) All Dependencies as List(列表形式查看所有依赖) All Dependencies …

【vue3|第4期】Vue3的选项式与组合式

日期:2024年5月30日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xf…

解析前端开发中同源策略与配置代理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 在前端开发中,跨域请求是一个常见的问题。同源策略限制了浏览器中一个页面…

win10系统下WPS工具显示灰色全部用不了,提示登录

如果你在写文档或使用excel时发现导航栏的工具全部使用不了,弹出是需要您登录,可以通过以下操作不用登录。 按照 1(搜索框)—> 2(应用)—> 3(WPS Office)点鼠标左键—> 4&a…

使用LeanCloud平台的即时通讯

LeanCloud 是领先的 Serverless 云服务,为产品开发提供强有力的后端支持,旨在帮助开发者降低研发、运营维护等阶段投入的精力和成本。 LeanCloud 整合了各项服务,让开发者能够聚焦在核心业务上,为客户创造更多价值。 *即时通讯 …

PromptIR论文阅读笔记

MZUAI和IIAI在NIPS2023上的一篇论文,用prompt来编码degradation,然后用来guide restoration network,使得模型能够泛化到不同degradation types and levels,也就是说是一个模型一次训练能够应对多种degradation的unified model。文…

apache大数据各组件部署搭建(超级详细)

apache大数据数仓各组件部署搭建 第一章 环境准备 1. 机器规划 准备3台服务器用于集群部署,系统建议CentOS7+,2核8G内存 172.19.195.228 hadoop101 172.19.195.229 hadoop102 172.19.195.230 hadoop103 [root@hadoop101 ~]# cat /etc/redhat-release CentOS Linux rele…

Azure DevOps Server 2022.2(升级过程)

1. 概述 2. 前期准备3. 升级过程4. 验证成果 1. 概述 本月微软公司发布了Azure DevOps Server 2022的第二个升级包Update 2 https://learn.microsoft.com/en-us/azure/devops/server/release-notes/azuredevops2022u2。 自2024年3月12日发布Azure DevOps Server 2022 Update 1(…

Linux综合实践(Ubuntu)

目录 一、配置任务 1.1 配置该服务器的软件源为中科大软件源 1.2 安装相关软件openssh-server和vim 1.3 设置双网卡,网卡1为NAT模式,网卡2为桥接模式(桥接模式下,使用静态ip,该网卡数据跟实验室主机网络设置相似,除…

Jvm(一)之栈、堆、方法区

前言-与正文无关 生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中,我们往往容易陷入工作的漩涡,忘记了停下脚步,感受周围的世界。让我们一起提醒自己,要适时放慢脚步…

中文多模态InternVL-Chat-V1-5,中文理解能力强劲,8 项指标超越商业模型,性能媲美 GPT-4V

前言 近年来,多模态大型语言模型(MLLM)的快速发展,为人工智能在图像、文本等多模态信息理解和处理方面带来了前所未有的突破。然而,现有的主流多模态模型多以英文为训练语言,在中文理解和处理方面存在着明…

SwiftUI中Popover的使用(弹出方式,箭头位置,如何退出)

在iOS中,popover是出现在现有内容顶部的UI元素,通常用于在上下文中向用户呈现新视图。与其他占用整个屏幕的视图控制器不同,popover出现在一个较小的、集中的区域,从而使用户能够在必要时与popover外的应用程序的其他部分进行交互…

521源码-游戏源码-2024卡牌回合自走棋手游《梦间集》推出全新Linux手工服务端

首款稀有卡牌回合自走棋手游《梦间集》推出全新Linux手工服务端整理 更多网站源码,游戏源码,学习教程,请点击👉-521源码-👈获取最新资源 本游戏下载地址:2024卡牌回合自走棋手游《梦间集》推出全新Linux手…

算法(十三)回溯算法---N皇后问题

文章目录 算法概念经典例子 - N皇后问题什么是N皇后问题?实现思路 算法概念 回溯算法是类似枚举的深度优先搜索尝试过程,主要是再搜索尝试中寻找问题的解,当发生不满足求解条件时,就会”回溯“返回(也就是递归返回&am…

switch语句

作用 让顺序执行的代码,产生分支。 基本语法 switch(变量) {//变量 常量 执行 case和 break之间的代码case 常量:满足条件执行的代码逻辑;break;case 常量:满足条件执行的代码逻辑;break;//case 可以有无数个default://如果上面case的条件都不满足 就会执行 def…

sqlite--SQL语句进阶

SQL语句进阶 函数和聚合 函数: SQL 语句支持利用函数来处理数据, 函数一般是在数据上执行的, 它给数据的转换和处理提供了方便常用的文本处理函数: 常用的文本处理函数: // 返回字符串的长度 length();//将字符串…

【阿里云】在云服务器ECS 安装MySQL、本地远程连接或宝塔连接(手动部署)

目录 一、安装MySQL 二、配置MySQL 三、远程访问MySQL数据库 四、Navicat本地连接远程MySQL 五、宝塔连接MySQL 如果你是使用宝塔安装的MySQL请绕过,以下是通过命令行模式(手动部署)进行安装、配置及运行。 安装:MySQL8.0 …

C#WPF数字大屏项目实战02--主窗体布局

1、主窗体起始属性 设置有关属性如下: WindowStyle"None"-》无边框 AllowsTransparency"True" -》允许透明 WindowStartupLocation"CenterScreen"-》启动时位于屏幕中间 FontFamily"Microsoft YaHei"-》字体微软雅黑 …

更新mirh connect 内置derby数据库密码

更新mirh connect 内置derby数据库密码 1、下载derby连接客户端 https://archive.apache.org/dist/db/derby/ 选择任意版本即可,比如 https://archive.apache.org/dist/db/derby/db-derby-10.14.2.0/db-derby-10.14.2.0-bin.zip 2、连接mirh文件数据库 1、把mi…