当前位置: 首页 > news >正文

__repr__魔术方法

__repr__ 是 Python 中一个非常重要的魔术方法(Magic Method),也常被称为双下划线方法 (Dunder Method)。它的主要作用是为对象提供一个官方的、明确的、面向开发者的字符串表示形式(Representation)

简单来说,当你需要用代码的方式来重建或识别一个对象时,你就需要用到 __repr__


__repr__ 的核心作用

1. 明确的、面向开发者的字符串

__repr__ 方法应该返回一个字符串,这个字符串的目标是毫不含糊地描述对象是什么。理想情况下,这个字符串应该是一个有效的 Python 表达式,可以直接用来重建该对象。

  • 调用场景:
    • 当你在 Python 交互式命令行或 Jupyter Notebook 中直接输入一个变量名时。
    • 当你调用内置函数 repr(obj) 时。
    • 在调试和日志记录中。

2. 与 __str__ 的区别

__repr__ 经常与另一个魔术方法 __str__ 进行比较,它们的区别是:

特性 __repr__ (Representation) __str__ (String)
目标受众 开发者(Developer) 用户(End User)
用途 调试、日志记录,要求明确、无歧义。 打印输出,要求可读、友好。
理想返回值 通常是 <ClassName(attribute1=value1, ...)> 或一个能重建对象的表达式,例如:Linear(784, 512) 友好的句子,例如:"一个包含 784 个输入的线性层。"
默认行为 如果未定义 __str__print() 函数会退回到调用 __repr__ 如果未定义,则调用父类的 __str____repr__

如何在你的类中实现 __repr__

以你的 Linear 类为例,如果实现了 __repr__,可以大大方便你检查网络结构:

示例代码

class Linear:def __init__(self, in_features, out_features, lr):self.in_features = in_featuresself.out_features = out_featuresself.lr = lr# ... (其他初始化代码)# 实现 __repr__ 魔术方法def __repr__(self):# 返回一个可以重建该对象的字符串return f"Linear(in_features={self.in_features}, out_features={self.out_features}, lr={self.lr})"# 创建对象
layer1 = Linear(784, 512, 0.008)# 打印输出
print(repr(layer1))
print(layer1) # 如果没有定义 __str__,print 也会使用 __repr__

打印输出

Linear(in_features=784, out_features=512, lr=0.008)
Linear(in_features=784, out_features=512, lr=0.008)

通过实现 __repr__,你在调试时可以清晰地看到这个 Linear 层的输入、输出和学习率,这比看到默认的 <__main__.Linear object at 0x...> 要有用得多。

http://www.hskmm.com/?act=detail&tid=16923

相关文章:

  • 基于萤火虫算法(FA)优化支持向量机(SVM)参数的分类实现
  • OSS cp(下载文件)
  • 有范同城旅游广告小程序系统:赋能旅游行业数字化运营新生态
  • Active Directory安全指南:默认域管理员账户的安全管理
  • 微云二手车运营版系统:多端覆盖的二手车平台解决方案
  • Linux常见命令1
  • 下载并安装ossutil
  • Unigine整合Myra UI Library全纪录(1)
  • new 为数组开辟内容空间的时候,数组大小这个额外的信息是如何存储的? int * p = new int[5]; 指针p 指向的的int 数据地址还是数组大小的地址?
  • 欧拉函数学习笔记
  • PDF论文文字公式提取,翻译与对照代码(自用)
  • Lambda表达式 - AlgosEng
  • ABAP 调用HTTP上传附件中文乱码
  • PDF入参以及模板对应签章图踩坑点 JAR版本为 iText5
  • 从 0 到 1 精通 SkyWalking:分布式系统的 “透视镜“ 技巧全解析
  • 系统调用brk 和 mmap 有什么不同?
  • 雷达系统杂波设计与仿真
  • 国标GB28181视频平台EasyCVR一体化加油站安防视频监控方案与实践
  • JavaScript 沙箱
  • PDF入参以及模板对应签章图踩坑点
  • 高性能PCIe 3.0软核,x1~x16,支持EP/RC,AXI4接口,内置DMA控制器,适用ASIC和FPGA
  • 使用git clone 批量下载huggingface模型文件
  • Python 换进安装GDAL
  • sync(同步本地文件到OSS)
  • MyBatisPlus 会默认设置 mybatis 的 scanPackages 为当前 BeanFactory 的 auto-configuration 的 base packages
  • 工程实践 使用本地包开发python项目
  • 详细介绍:Python + Flask + API Gateway + Lambda + EKS 实战
  • 日记4
  • P2042 [NOI2005] 维护数列 题解
  • 达梦数据库查询字段类型为Date 修改为DateTime