Python 内置方法__new__()、__init__() 和 __call__()有什么区别?

news/2025/2/7 3:58:11/

在 Python 中,__new__()__init__() 和 __call__() 是类的内置方法,用于不同的目的。

1、__new__() 方法

__new__() 方法是在创建一个新实例对象之前被调用的特殊方法。负责创建并返回类的实例对象,通常用于自定义类的实例化过程。__new__() 方法是一个类方法,接收类作为第一个参数(通常命名为 cls),并返回一个新的实例对象。__new__() 方法在对象创建之前执行,用于控制实例化的过程,可以在创建实例之前对实例进行修改或验证。

class MyClass:def __new__(cls, *args, **kwargs):instance = super().__new__(cls)# 自定义实例化过程# ...return instancedef __init__(self, *args, **kwargs):# 初始化实例# ...pass

2、__init__方法

__init__()方法是在实例对象创建之后被调用的特殊方法。负责对实例对象进行初始化,通常用于设置实例的属性或执行其他必要的初始化操作。__init__()方法是一个实例方法,接收实例对象作为第一个参数(通常命名为 self),不返回任何值。

class MyClass:def __init__(self, name):self.name = name# 其他初始化操作obj = MyClass("Alice")  # 创建实例对象并调用 __init__() 方法进行初始化
print(obj.name)  # 输出 "Alice"

3、__call__() 方法

__call__() 方法使一个对象可以像函数一样被调用。当实例对象被调用时,__call__()方法被调用,可以在其中定义对象的行为。__call__() 方法可以接收任意参数,并返回相应的结果。

class MyCallable:def __call__(self, *args, **kwargs):# 在对象被调用时执行的逻辑# ...return resultmy_obj = MyCallable()
result = my_obj(arg1, arg2)  # 调用对象,实际上调用了 __call__() 方法

 4、总结

  • __new__() 方法负责创建并返回类的实例对象,可以在实例化之前对实例进行修改或验证。
  • __init__() 方法负责对实例对象进行初始化,设置实例的属性或执行其他必要的初始化操作。
  • __call__() 方法使一个对象可以像函数一样被调用,定义了对象被调用时的行为。

http://www.ppmy.cn/news/1147810.html

相关文章

代码混淆界面介绍

代码混淆界面介绍 代码混淆功能包括oc,swift,类和函数设置区域。其他flutter,混合开发的最终都会转未oc活着swift的的二进制,所以没有其他语言的设置。 代码混淆功能分顶部的显示控制区域:显示方式,风险等…

linux下读取socket相关的系统调用总结

recv 函数原型 /* Read N bytes into BUF from socket FD.Returns the number read or -1 for errors.This function is a cancellation point and therefore not marked with__THROW. */ extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags); 所属文件…

Pytorch之SwinTransformer图像分类

文章目录 前言一、Swin Transformer1.Swin Transformer概览2.Patch Partition3.Patch Merging4.W-MSA5.SW-MSA(滑动窗口多头注意力机制)6.Relative Position bias(相对位置偏移)7.网络结构🥇Swin Transformer Block🥈Architecture 二、网络实现1.构建Eff…

查询资源消耗

import subprocess def get_cpu_usage(pid, duration): output subprocess.check_output([‘pidstat’, ‘-d’, ‘-p’, str(pid), ‘1’, str(duration)]).decode(‘utf-8’) lines output.strip().split(’\n’) cpu_usage [] for line in lines[4:]: fields line.spli…

I2VGen-XL高清图像生成视频大模型

本项目I2VGen-XL旨在解决根据输入图像生成高清视频任务。I2VGen-XL由达摩院研发的高清视频生成基础模型之一,其核心部分包含两个阶段,分别解决语义一致性和清晰度的问题,参数量共计约37亿,模型经过在大规模视频和图像数据混合预训…

ts知识点——基础积累

第一章 快速入门 1、TypeScript简介 TypeScript是JavaScript的超集。它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。TS完全兼容JS,换言之,…

zsh: command not found: conda问题解决

参考:https://zhuanlan.zhihu.com/p/158703094 一、问题介绍与环境介绍 系统为macOS Catalina 10.15.4 所用终端为zsh 安装了oh-my-zsh之后conda命令在终端中不可用。 二、原因分析 终端中zsh的可访问的程序一般放在/bin, /usr/bin, /usr/local/bin,/bin目录下&…

Fisher辨别分析

问题要求 在UCI数据集上的Iris和Sonar数据上验证算法的有效性。训练和测试样本有三种方式(三选一)进行划分: (一) 将数据随机分训练和测试,多次平均求结果 (二)K折交叉验证 &…