python中的魔法函数及pytorch中forward()函数

python 中的魔法函数

本节参照 python杂记------魔法方法 进行总结和梳理。

魔法方法(magic methods):python 中的魔法方法是指方法名以两个下划线开头并以两个下划线结尾的方法,因此也叫 Dunder Methods (Double Underscores),常用于运算符重载。

魔法方法会在对类的某个操作时后端自动调用,而不需要自己直接调用。例如,创建一个类A的对象,a=A(),python就会自动调用__new__()和__init_()函数

类函数__init__()的理解

在创建类后,类通常会自动创建一个__init__()方法。该方法是一个特殊的方法,类似 JAVA 语言中的构造方法。每当创建一个类的新实例时,Python 都会自动执行它。init () 方法必须包含一个参数,并且必须是第一参数。self 参数是一个指向实例本身的引用,用于访问类中的属性和方法。在方法调用时会自动传递实际参数 self。因此,当__init__()方法只有一个参数时,在创建类的实例时,就不需要指定参数了。

在__init__()方法中,除了 self 参数外,还可以自定义一些参数,参数间使用逗号","进行分隔。例如,init(self, a, b),但是在实例化类时,需要指定 a 和 b 这两个参数。

初始化和构造相关的魔法函数:

方法名 描述
new(cls, other) 在实例化一个对象的时候被调用
init(self, other) 用于初始化对象,被__new__方法调用
del(self) 对象的析构方法

集合相关的魔法函数:

方法名 描述
len(self) 被内置方法len()调用, 返回容器的长度, 可变和不可变的容器类型都需要实现
getitem(self, key) 在使用key访问成员时调用, object[key]
setitem(self, key, value) 给集合中key值赋值时被调用, object[key] = value
delitem(self, key) 被del 调用, 例如: del object[key]
contains(self) 在执行in()或者not in时被调用
reversed(self) 被内置方法reversed()调用, 翻转序列的顺序
missing(self) 在字典的子类中使用,当试图访问字典中不存在的key时被调用

类函数__getitem__()的理解

在python中__getitem__(self,key)方法被称为魔法方法,这个方法返回所给键对应的值。

当对象是序列时,键是整数。当对象是映射时(字典),键是任意值。

在定义类时,如果希望能按照键取类的值,则需要定义__getitem__()方法。如果给类定义了__getitem__()方法,则当按照键取值时,可以直接返回__getitem__()方法执行的结果。

pytorch 中 forward() 函数

本节参考 #深入探究# PyTorch中的 forward() 方法详解 进行的总结梳理。

使用 PyTorch 进行模型训练时,不需要显式地调用 forward 函数,只要在实例化一个对象中传入对应的参数就可以自动调用 forward 函数。

PyTorch 中的大部分方法都继承自 torch.nn.Module,而 torch.nn.Module 的__call__(self) 函数中会返回 forward() 函数的结果,因此 PyTroch 中的 forward() 函数等于是被嵌套在了__call__(self) 函数中;因此 forward() 函数可以直接通过类实例化的对象被调用,而不用实例化对象。

javascript 复制代码
class Module(nn.Module):
    def __init__(self):
        super(Module, self).__init__()
        # ......
       
    def forward(self, x):
        # ......
        return x

data = 10  # 输入数据
module = Module() # 实例化一个对象
module(data)  # 前向传播,自动调用module.forward(data) 
相关推荐
waysolong9025 分钟前
MCP服务构建、使用
python
胜天半月子1 小时前
Python自动化测试 | 快速认识并了解pytest的基本使用
服务器·python·pytest
小小测试开发1 小时前
Python Web3库入门:从零开始与以太坊区块链交互
python·web3·区块链
独行soc1 小时前
2025年渗透测试面试题总结-224(题目+回答)
网络·python·安全·web安全·adb·渗透测试·安全狮
程序员三藏1 小时前
软件测试之环境搭建及测试流程
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
10岁的博客1 小时前
PyTorch快速搭建CV模型实战
人工智能·pytorch·python
寒秋丶2 小时前
AutoGen多智能体协作、人机交互与终止条件
人工智能·python·microsoft·ai·人机交互·ai编程·ai写作
Turnsole_y2 小时前
pytest与Selenium结合使用指南
开发语言·python
AI量化投资实验室3 小时前
年化398%,回撤11%,夏普比5,免费订阅,5积分可查看参数|多智能体的架构设计|akshare的期货MCP代码
人工智能·python
夫唯不争,故无尤也3 小时前
AI调度框架全解析:从通用到LLM专用
python·大模型·调用框架