print会默认调用__str__方法吗

一、现象描述:

打印Mongodb自己生成的id:

print(res['_id'])
res['_id']

输出:
659faa6670433c2c86986861
ObjectId(‘659faa6670433c2c86986861’)

二、为什么会不一样呢

在 MongoDB 中,_id 字段通常是一个 ObjectId 类型的实例。当你在 Python 中打印一个 ObjectId 对象时,会自动调用该对象的 str() 方法,该方法返回对象的字符串表示形式。这就是为什么当你执行 print(res[‘_id’]) 时,你看到的是 ObjectId 的字符串形式,而不是 ObjectId 对象本身。

然而,当你在交互式解释器(如 Python shell 或 Jupyter notebook)中直接求值 res[‘_id’] 时,解释器会调用 repr() 方法,该方法返回一个可以被解释器重新解析的或者说“官方”的字符串表示。对于 ObjectId 类来说,repr() 方法返回的是 ObjectId(‘659faa6670433c2c86986861’) 这种形式,这个形式更准确地表明了这是一个 ObjectId 对象,而不是简单的字符串。

简而言之,两者之间的区别在于:

print(res[‘_id’]) 调用了 ObjectId 对象的 str() 方法,该方法返回了该 ObjectId 的字符串表示形式。
res[‘_id’] 在交互式环境中直接求值,调用了 ObjectId 对象的 repr() 方法,返回了一个明确表明对象类型的字符串表示。
这种区分在 Python 中是常见的,不仅适用于 ObjectId,还适用于许多其他对象。它有助于区分打印输出的友好显示和提供更多详细信息的官方字符串表示。

三、print会默认调用__str__方法吗

是的,在 Python 中,当你使用 print() 函数打印一个对象时,会默认调用该对象的 str() 方法来获取对象的字符串表示。这是因为 print() 需要一个可以显示的字符串来输出。

str() 方法的目的是返回一个对象的“非正式”或可打印的字符串表示,通常是为了可读性。这意味着它应该返回一个对终端用户友好的字符串。

如果一个对象没有定义 str() 方法,Python 会回退到使用 repr() 方法的返回值。repr() 方法的目标是返回一个对象的“正式”字符串表示,通常可以用来重新创建该对象。在开发中,它的输出通常是给开发者看的,而不是终端用户。

这里有一个简单的例子来说明这一点:

class Example1:def __repr__(self):return "Example.__repr__ called"def __str__(self):return "Example.__str__ called"class Example2:def __repr__(self):return "Example.__repr__ called"
obj1 = Example1()
print(obj1)  # 会调用 __str__ 方法
obj2 = Example2()
print(obj2)  # 由于没有 __str__ 方法,会调用 __repr__ 方法

输出:
Example.str called
Example.repr called

四、结论:

这表明 print() 首选 str(),但如果没有定义 str(),它会使用 repr()。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网中南向协议、北向协议是什么?南向协议、北向协议的区别

南向协议通常是用于管控其他厂商设备的数据接口,即向下对接的数据接口。 通过该协议,实现对底层设备上报信息的集中监控、统计,此外可让控制器利用南向协议的下行通道,对设备实现控制功能。 北向协议是借助控制模块向上层业务应用…

Go 虚拟环境管理工具 gvm 原理介绍与使用指南

本文谈下我对 Go 版本管理的一些想法。让后,我将介绍一个小工具,gvm。这个话题说起来也很简单,但如果想用的爽,还是要稍微梳理下。 背景介绍 Go 的版本管理,并非包的依赖管理,而且关于如何在不同的 Go 版…

探索未来:2024 年 5 大前沿生成式 AI 趋势

探索未来:2024 年 5 大前沿生成式 AI 趋势 1. 多模态 AI 模型的崛起2. 功能强大且强大的小型语言模型3. 自主代理的崛起4. 开源模型将与专有模型匹敌5. 云原生成为本地 GenAI 的关键总结 2023 年标志着技术发展的一个分水岭,生成式 AI 走入了主流。随着 …

牛客:X图形

描述 KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的X形图案。 输入描述: 多组输入,一个整数(2~20),表示输出的行数,也表示组成“X”的反斜线和…

浙政钉-H5小程序应用采集开发手册

浙政钉-H5&小程序应用采集开发手册 埋点代码分为:稳定性监控代码(Emas)和流量分析代码(A+)。稳定性监控代码(Emas)只需要在首页加入。流量分析代码(A+)每个页面都需要加入,但是可以写通用js,在其他页面引入。 适用范围 本文档适用于浙政钉业务web(H5)或小程序应…

GPT只是开始,Autonomous Agents即将到来

生成式AI虽然很早便已经引起了广泛关注,但直到ChatGPT的出现,许多公司的领导层才切身感受到了大语言模型(LLM)带来的深远影响。面临这种行业变革,诸多企业正争先恐后地加入到这场潮流中,但生成式AI的进步速…

【力扣 445】两数相加 II C++题解(链表+模拟+数学+头插法)

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外,这两个数字都不会以零开头。 示例1: 输入:l1 [7,2,4,3], l2 [5,6,4]…

indexedDB的基本操作

indexedDB概述 IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。IndexedDB 允许储存大量数据,提供查找接口,还能建立索引。这些都是 LocalStorage 所不具备的。就数据库类型而言,IndexedDB 不属于关系型数据库…

算法训练营Day55(子序列--编辑距离)

392.判断子序列 392. 判断子序列 - 力扣(LeetCode) 这道题目算是 编辑距离问题 的入门题目(毕竟这里只是涉及到减法),慢慢的,后面就要来解决真正的编辑距离问题了 和最长公共子序列相似 他那道题区别就是e…

期待已久!阿里云容器服务 ACK AI 助手正式上线

作者:行疾 大模型技术的蓬勃发展持续引领 AI 出圈潮流,各行各业都在尝试采用 AI 工具实现智能增效。 2023 年云栖大会上,阿里云容器服务团队正式发布 ACK AI 助手,带来大模型增强智能诊断,帮助企业和开发者降低 K8s …

Spark运行架构以及容错机制

Spark运行架构以及容错机制 1. Spark的角色区分1.1 Driver1.2 Excuter 2. Spark-Cluster模式的任务提交流程2.1 Spark On Yarn的任务提交流程2.1.1 yarn相关概念2.1.2 任务提交流程 2.2 Spark On K8S的任务提交流程2.2.1 k8s相关概念2.2.2 任务提交流程 3. Spark-Cluster模式的…

BACnet网关BA100实现Modbus转BACnet,专为Modbus协议设备与BA系统的高效对接设计

随着物联网技术的迅猛发展,人们深刻认识到在智能化生产和生活中,实时、可靠、安全的数据传输至关重要。在此背景下,高性能的物联网数据传输解决方案——协议转换网关应运而生,广泛应用于工业自动化和数字化工厂应用环境中。 钡铼…

搜维尔科技:【简报】元宇宙数字人赛道,《莉思菱娜》

个性有些古灵精怪时儿安静时而吵闹,虽然以人类寿命来算已经200多岁但在 吸血鬼中还只是个小毛头,从中学开始喜欢打扮偏爱黑白灰色系的服装喜欢时 尚圈,立志想成为美妆或时尚网红不过目前还是学生,脸上的浅色血迹是纹身 贴纸&#…

深度学习-循环神经网络-RNN实现股价预测-LSTM自动生成文本

序列模型(Sequence Model) 基于文本内容及其前后信息进行预测 基于目标不同时刻状态进行预测 基于数据历史信息进行预测 序列模型:输入或者输出中包含有序列数据的模型 突出数据的前后序列关系 两大特点: 输入(输出)元素之间是具有顺序关系。不同的顺序,得到的结果应…

安全基础~通用漏洞1

文章目录 知识补充Acess数据库注入MySQL数据库PostgreSQL-高权限读写注入MSSQL-sa高权限读写执行注入Oracle 注入Mongodb 注入sqlmap基础命令 知识补充 order by的意义: union 操作符用于合并两个或多个 select语句的结果集。 union 内部的每个 select 语句必须拥有…

哈希--73. 矩阵置零/medium 理解度A

73. 矩阵置零 1、题目2、题目分析3、复杂度最优解代码示例4、适用场景 1、题目 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,…

express 项目支持 typescript 实战

首先创建一个express项目 初始化项目 mkdir myapp cd myapp npm init (都用默认值)添加依赖包 npm install express nodemon修改 package.json {"name": "myapp","version": "1.0.0","description": "","…

$.ajax与同源策略

1.jQuery中的ajax请求 学习Jquery中的ajax,我们借助官方文档 $.ajax(url,[settings]) | jQuery API 3.2 中文文档 | jQuery API 在线手册 使用$.ajax()方法完成图书案例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&quo…

Oracle dbms_sql 的用法

DBMS_SQL 是 Oracle 数据库中的一个包&#xff0c;用于动态执行 SQL 语句。它允许您在运行时构建和执行 SQL 语句&#xff0c;提供了对动态 SQL 的支持。以下是 DBMS_SQL 的基本用法&#xff1a; 打开游标: 使用 DBMS_SQL.OPEN_CURSOR 打开一个游标。 DECLARE l_cur INTEGER;…

mc我的世界服务器多少钱一个月?

我的世界服务器多少钱一个月&#xff1f;低至7元一个月&#xff0c;阿里云和腾讯云均可以选择mc服务器&#xff0c;阿里云2核2G3M轻量服务器87元一年、腾讯云轻量2核2G3M服务器88元一年&#xff0c;阿里云ECS云服务器2核2G3M带宽99元一年&#xff0c;腾讯云2核4G5M带宽轻量应用…