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) 
相关推荐
databook12 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar13 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805114 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_14 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
CoovallyAIHub16 小时前
开源的消逝与新生:从 TensorFlow 的落幕到开源生态的蜕变
pytorch·深度学习·llm
数据智能老司机20 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机21 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机21 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机21 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i1 天前
drf初步梳理
python·django