Python __repr__()方法:显示属性

先看下面程序:

class Item:
    def __init__ (self, name, price):
        self.name = name
        self.price = price
# 创建一个Item对象,将之赋给im变量
im = Item('鼠标', 29.8)
# 打印im所引用的Item对象
print(im)

上面程序创建了一个 Item 对象,然后使用 print() 方法输出 Item 对象。编译、运行上面程序,将看到如下输出结果:

<__main__.Item object at 0x000001DB45D406D8>

当读者运行上面程序时,可能会看到不同的输出结果,at 后的 16 位十六进制数字可能发生改变。但这个输出结果是怎么来的呢?按道理来说,print() 函数只能在控制台打印字符串,而 Item 实例是内存中的一个对象,怎么能直接转换为字符串输出呢?

事实上,当使用该方法输出 Item 对象时,实际上输出的是 Item 对象的 __repr__() 方法的返回值。也就是说,下面两行代码的效果完全一样:

print (im)
print (im.__repr__)

__repr__() 是 Python 类中的一个特殊方法,由于 object 类己提供了该方法,而所有的 Python 类都是 object 类的子类,因此所有的 Python 对象都具有 __repr__() 方法。

因此,当程序需要将任何对象与字符串进行连接时,都可先调用 __repr__() 方法将对象转换成字符串,然后将两个字符串连接在一起。例如如下代码:

im str = im.__repr() + ""

__repr__() 是一个非常特殊的方法,它是一个“自我描述”的方法,该方法通常用于实现这样一个功能:当程序员直接打印该对象时,系统将会输出该对象的“自我描述”信息,用来告诉外界该对象具有的状态信息。

object 类提供的 __repr__() 方法总是返回该对象实现类的“类名+object at+内存地址”值,这个返回值并不能真正实现“自我描述”的功能,因此,如果用户需要自定义类能实现“自我描述”的功能,就必须重写 __repr__() 方法。例如下面程序:

class Apple:
    # 实现构造器
    def __init__(self, color, weight):
        self.color = color;
        self.weight = weight;
    # 重写__repr__方法,用于实现Apple对象的“自我描述”
    def __repr__(self):
        return "Apple[color=" + self.color +\
            ", weight=" + str(self.weight) + "]"
a = Apple("红色" , 5.68)
# 打印Apple对象
print(a)

编译、运行上面程序,可以看到如下运行结果:

Apple[color=红色, weight=5.68]

从上面的运行结果可以看出,通过重写 Apple 类的 __repr__() 方法,就可以让系统在打印 Apple 对象时打印出该对象的“自我描述”信息。

大部分时候,重写 __repr__() 方法总是返回该对象的所有令人感兴趣的信息所组成的字符串。通常可返回如下格式的字符串:

类名[field1 = 值1, field2 =值2, ...]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/342712.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库原理及应用期末复习汇总(附某高校期末真题试卷)

文章目录 《数据库原理及应用》试题1一、选择题二、填空三、简答题四、T-SQL综合题五、综合应用题 《数据库原理及应用》试题2一、选择题二、填空三、简答题四、T-SQL综合题五、综合应用题 《数据库原理及应用》试题3一、选择题二、填空三、简答题四、T&#xff0d;SQL语言编程…

性能优化-高通的Hexagon DSP和NPU

原文来自【 Qualcomm’s Hexagon DSP, and now, NPU 】 本文主要介绍Qualcomm Hexagon DSP和NPU&#xff0c;这些为处理简单大量运算而设计的硬件。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xf…

如何在阿里云提交使用工单

有时候大家在使用阿里云的服务时候&#xff0c;可能会遇到一些问题&#xff0c;或许是云服务器如何升级了如何改套餐啊之类的&#xff0c;亦或者是域名ICP备案啊看进度啊等等问题&#xff0c;遇到问题怎么办不要慌。我们可以使用阿里云的工单系统&#xff0c;阿里云工单系统可以…

【UEFI基础】EDK网络框架(MTFTP4)

MTFTP4 在TCP/IP网络协议族中有FTP协议&#xff0c;但是UEFI下的MTFTP4并不是对FTP协议的实现&#xff0c;两者虽然功能上差不多&#xff0c;但是实现却是不同的。FTP下层使用TCP来连接&#xff1a; 而MTFTP4下层却是UDP4。 MTFTP4代码综述 MTFTP4的实现在NetworkPkg\Mtftp4…

AssertionError: Torch not compiled with CUDA enabled

目录 报错查看已安装的torch的版本卸载安装GPU版本的torch查看cuda版本手工安装通过pip命令手工安装。 结果更新cuda到12.1大功告成 报错 经查阅&#xff0c;这个问题是因为conda默认安装的是CPU版本的torch&#xff0c;应该使用GPU版本的。 查看已安装的torch的版本 pip li…

UI设计师主要是做什么的?

由于用户体验越来越受到重视&#xff0c;UI 设计师也成为现代互联网行业不可或缺的职业。他们通过美化和优化软件界面&#xff0c;为用户带来舒适的使用体验&#xff0c;目标是提高用户满意度。本文将对 UI 进行深入分析设计人员的工作职责和 UI 设计人员的工作内容&#xff0c…

云架构师学习------腾讯云通识-网络与安全

云架构师学习------腾讯云通识-存储与数据库 云架构师学习------腾讯云通识-网络与安全云上网络负载均衡工作原理产品优势使用场景技术原理基础架构转发路径 私有网络产品概述VIP核心组成部分私有网络连接私有网络安全 产品优势应用场景访问公网对公网提供服务应用容灾部署混合…

【办公类-19-02】20240122图书EXCEL插入列并删除空行

作品展示 背景需求 上次23个班级班主任统计图书&#xff0c;写在EXCEL内 【办公类-19-01】20240108图书统计登记表制作&#xff08;23个班级&#xff09;EXCEL复制表格并合并表格-CSDN博客文章浏览阅读693次&#xff0c;点赞12次&#xff0c;收藏7次。【办公类-19-01】202401…

webrtc线程代码研究

webrtc线程类的实现集成了socket的收发&#xff0c;消息队列&#xff0c;值得研究&#xff0c;基于webrtc75版本。 主要类介绍 Thread类 虚线&#xff1a;继承 实线&#xff1a;调用 橙色&#xff1a;接口 Thread继承MessageQueueThread提供两个静态方法,分别用来创建带socke…

Asp.net core 框架入门

概述 appsettings.json&#xff1a;配置文件&#xff0c;数据库连接字符串配置信息 Program.cs&#xff1a;程序入口文件&#xff08;里面有个Main方法&#xff09; Startup.cs&#xff1a;启动配置文件 依赖项&#xff1a;管理项目所依赖的第三方组件的安装&#xff0c;配…

数字图像处理(实践篇)二十六 使用cvlib进行人脸检测、性别检测和目标检测

目录 1 安装cvlib 2 涉及的函数 3 实践 4 其他 cvlib一个简单,高级,易于使用的开源Python计算机视觉库。 1 安装cvlib # 安装依赖pip install opencv-python tensorflow# 安装cvlibpip install cvlib</

你不知道的git如何撤销回退版本

简言之&#xff1a;从1 回退到 3&#xff0c;在3版本通过回退记录(git reflog)找到它的上一条回退记录的hash值&#xff0c;复制1的hash值进行回退&#xff0c;执行git reset --hard 粘贴1的hash值进来&#xff0c;此时就回到1的版本了&#xff0c;执行git log即可看到1、2、3、…

HCIA——25FTP 的工作原理、功能、TFTP、控制连接、数据连接的选择、解答

学习目标&#xff1a; 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议&#xff0c;了解典型网络设备的组成和特点&#xff0c;理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

Oracle 高级网络压缩 白皮书

英文版白皮书在这里 或 这里。 本文包括了对英文白皮书的翻译&#xff0c;和我觉得较重要的要点总结。 执行概述 Oracle Database 12 引入了一项新功能&#xff1a;高级网络压缩&#xff0c;作为高级压缩选项的一部分。 本文概述了高级网络压缩、其优点、配置细节和性能分析…

C# 线程本地存储 为什么线程间值不一样

一&#xff1a;背景 1. 讲故事 有朋友在微信里面问我&#xff0c;为什么用 ThreadStatic 标记的字段&#xff0c;只有第一个线程拿到了初始值&#xff0c;其他线程都是默认值&#xff0c;让我能不能帮他解答一下&#xff0c;尼玛&#xff0c;我也不是神仙什么都懂&#xff0c…

Dockerfile中CMD命令的用法,你了解几个?

文章目录 1.问题描述2.解决方法3.问题原因分析4.CMD常见的用法4.1 执行应用程序4.2 使用 Shell 执行命令4.3 定义环境变量 5.最佳实践 1.问题描述 今天在进行业务调试时, 发现调试的java应用所在的容器无限重启&#xff0c;经过排查发现问题出在Dockerfile 文件中的CMD命令上&…

设计模式下

一、代理模式 一、概念 代理模式就是给一个对象提供一个代理&#xff0c;并由代理对象控制对原对象的引 用。它使得客户不能直接与真正的目标对象通信。代理对象是目标对象的代表&#xff0c; 其他需要与这个目标对象打交道的操作都是和这个代理对象在交涉。 例如&#xff1a;去…

安装 nvm

前言&#xff1a; nvm 即 node 版本管理工具 (node version manager)&#xff0c;好处是方便切换 node.js 版本。 通过将多个 node 版本安装在指定路径&#xff0c;然后通过 nvm 命令切换时&#xff0c;就会切换我们环境变量中 node 命令指定的实际执行的软件路径。 使用场景…

Selenium自动化测试之学会元素定位

这是我经常被问到的一个问题&#xff0c;也是我很讨厌回答的问题&#xff0c;因为要想回答这个问题需要知道上下文。什么样式的元素&#xff0c;有哪些属性&#xff0c;是否有表单嵌套&#xff0c;都尝试了哪些定位方法。。。而且没几个提问者能事先详细的说明这些。哪儿像提bu…

宠物互联网医院系统:数字化呵护你爱宠的新时代

宠物互联网医院系统正在为宠物主人提供一种前所未有的数字化健康护理体验。通过结合创新技术&#xff0c;这一系统旨在让宠物医疗变得更加便捷、智能和个性化。让我们深入探讨宠物互联网医院系统的技术核心&#xff0c;以及如何应用代码为你的爱宠提供最佳关怀。 1. 远程医疗…