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) 
相关推荐
编程零零七25 分钟前
Python巩固训练——第一天练习题
开发语言·python·python基础·python学习·python练习题
Zonda要好好学习1 小时前
Python入门Day4
java·网络·python
小龙在山东1 小时前
Python 包管理工具 uv
windows·python·uv
IT古董2 小时前
【第三章:神经网络原理详解与Pytorch入门】02.深度学习框架PyTorch入门-(5)PyTorch 实战——使用 RNN 进行人名分类
pytorch·深度学习·神经网络
weixin_307779132 小时前
批量OCR的GitHub项目
python·github·ocr
孤狼warrior3 小时前
灰色预测模型
人工智能·python·算法·数学建模
神仙别闹3 小时前
基于Python实现LSTM对股票走势的预测
开发语言·python·lstm
机器学习之心3 小时前
小波增强型KAN网络 + SHAP可解释性分析(Pytorch实现)
人工智能·pytorch·python·kan网络
JavaEdge在掘金3 小时前
MySQL 8.0 的隐藏索引:索引管理的利器,还是性能陷阱?
python
站大爷IP4 小时前
Python办公自动化实战:手把手教你打造智能邮件发送工具
python