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) 
相关推荐
PPPPPaPeR.3 分钟前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法
JaydenAI6 分钟前
[拆解LangChain执行引擎] ManagedValue——一种特殊的只读虚拟通道
python·langchain
骇城迷影11 分钟前
Makemore 核心面试题大汇总
人工智能·pytorch·python·深度学习·线性回归
长安牧笛14 分钟前
反传统学习APP,摒弃固定课程顺序,根据用户做题正确性,学习速度,动态调整课程难度,比如某知识点学不会,自动推荐基础讲解和练习题,学习后再进阶,不搞一刀切。
python·编程语言
码界筑梦坊25 分钟前
330-基于Python的社交媒体舆情监控系统
python·mysql·信息可视化·数据分析·django·毕业设计·echarts
森焱森30 分钟前
详解 Spring Boot、Flask、Nginx、Redis、MySQL 的关系与协作
spring boot·redis·python·nginx·flask
he___H33 分钟前
双色球红球
python
deephub35 分钟前
机器学习特征工程:分类变量的数值化处理方法
python·机器学习·特征工程·分类变量
mailangduoduo40 分钟前
零基础教学连接远程服务器部署项目——VScode版本
服务器·pytorch·vscode·深度学习·ssh·gpu算力