【Python】一文向您详细介绍 __str__ 的作用和用法

【Python】一文向您详细介绍 str 的作用和用法
 
下滑即可查看博客内容
在这里插入图片描述

🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇

🎓 博主简介985高校的普通本硕,曾有幸发表过人工智能领域的 中科院顶刊一作论文,熟练掌握PyTorch框架

🔧 技术专长: 在CVNLP多模态等领域有丰富的项目实战经验。已累计提供近千次定制化产品服务,助力用户少走弯路、提高效率,近一年好评率100%

📝 博客风采: 积极分享关于深度学习、PyTorch、Python相关的实用内容。已发表原创文章600余篇,代码分享次数逾七万次

💡 服务项目:包括但不限于科研辅导知识付费咨询以及为用户需求提供定制化解决方案

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

🌵文章目录🌵

  • 📚一、__str__ 的基本概念
      • 示例代码
  • 🚀二、自定义 __str__ 方法
      • 示例代码
  • 🔍三、__str__ 方法与字符串格式化
      • 示例代码
  • 💡四、__str__ 方法与类的其他方法
      • 示例代码
  • 🌈五、__str__ 方法与继承
      • 示例代码
  • 💡六、总结与展望

下滑即可查看博客内容

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  

📚一、str 的基本概念

  在Python中,__str__ 是一个特殊的方法(也称为魔法方法或双下划线方法)。当一个对象需要被转换为字符串时,这个方法会被调用。换句话说,当你尝试使用 print() 函数打印对象,或者将对象与字符串进行连接时,Python 会首先查找该对象的 __str__ 方法并尝试调用它。

  如果没有为自定义类定义 __str__ 方法,那么当你尝试将其实例转换为字符串时,Python会调用其基类的 __str__ 方法,这通常会返回一个包含对象类型、地址等信息的默认字符串。

示例代码

class Person:def __init__(self, name, age):self.name = nameself.age = age# 如果没有定义 __str__ 方法,打印Person对象会得到类似下面的输出
p = Person("Alice", 30)
print(p)  # 输出:<__main__.Person object at 0x...>

🚀二、自定义 str 方法

为了提供更有意义的字符串表示,我们可以为自定义类定义 __str__ 方法。

示例代码

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"Person(name={self.name}, age={self.age})"p = Person("Alice", 30)
print(p)  # 输出:Person(name=Alice, age=30)

🔍三、str 方法与字符串格式化

__str__ 方法中,我们可以使用各种字符串格式化技术来生成更复杂的字符串表示。

示例代码

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"姓名: {self.name}, 年龄: {self.age}岁"p = Person("Bob", 25)
print(p)  # 输出:姓名: Bob, 年龄: 25岁

💡四、str 方法与类的其他方法

__str__ 方法可以与其他类方法一起使用,以生成基于对象状态的字符串表示。

示例代码

class Circle:def __init__(self, radius):self.radius = radiusdef area(self):return 3.14159 * self.radius ** 2def __str__(self):return f"Circle with radius {self.radius} and area {self.area()}"c = Circle(5)
print(c)  # 输出:Circle with radius 5 and area 78.53975

🌈五、str 方法与继承

在面向对象编程中,子类可以继承父类的 __str__ 方法,并根据需要覆盖它。

示例代码

class Animal:def __init__(self, name):self.name = namedef __str__(self):return f"Animal: {self.name}"class Dog(Animal):def __init__(self, name, breed):super().__init__(name)self.breed = breeddef __str__(self):return f"Dog: {self.name}, breed: {self.breed}"d = Dog("Buddy", "Golden Retriever")
print(d)  # 输出:Dog: Buddy, breed: Golden Retriever

💡六、总结与展望

  通过上面的介绍,我们可以看到 __str__ 方法在Python编程中的重要性。它为自定义类提供了一个方便的机制,使得我们可以控制对象在转换为字符串时的表示方式。这对于调试、日志记录以及用户交互等方面都非常有用。

  在实际开发中,我们应该始终考虑为自定义类定义 __str__ 方法,以提供清晰、有意义的字符串表示。这不仅有助于提高代码的可读性和可维护性,还能帮助用户更好地理解我们的程序。

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

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

相关文章

【CS.AI】AI引领编程新时代:深度探索GitHub Copilot

文章目录 引言0. TOP TAKEAWAYS 重要要点1. Copilot的基本功能2. 技术原理3. 优势与局限优势局限 4. 使用体验4.1 初次使用4.2 在 JetBrains 全家桶中使用 GitHub Copilot1. 安装插件2. 配置插件3. 使用 GitHub Copilot 4.3 日常开发4.4 体验与反馈 5. 对开发者生态系统的影响5…

梯度下降: 02. 批量梯度下降BGD,随机梯度下降SGD,小批量梯度下降MBGD

简介 本文从原理上介绍了三种梯度下降的方法,相同点,异同点,优缺点。 内容包含了数学公式的推导与说明 1. 梯度下降的3种方法 梯度下降分三类,原理基本相同,操作方式略有区别 批量梯度下降BGD(BatchGradient Descent):使用全量数据进行特征抽取,模型训练小批量梯度下降…

VueRouter3学习笔记

文章目录 1&#xff0c;入门案例2&#xff0c;一些细节高亮效果非当前路由会被销毁 3&#xff0c;嵌套路由4&#xff0c; 传递查询参数5&#xff0c;命名路由6&#xff0c;传递路径参数7&#xff0c;路径参数转props8&#xff0c;查询参数转props9&#xff0c;replace模式10&am…

【C++】深入理解decltype和decltype(auto)

深入理解decltype和decltype&#xff08;auto&#xff09; 一、decltype语法介绍二、decltype的推导规则1. expr不加括号2. expr加上括号 三、关于decltype的CV属性推导四、 decltype(auto) 的使用 一、decltype语法介绍 decltype关键字是C11新标准引入的关键字&#xff0c;它…

Hadoop3:MapReduce源码解读之Map阶段的Job任务提交流程(1)

3、Job工作机制源码解读 用之前wordcount案例进行源码阅读&#xff0c;debug断点打在Job任务提交时 提交任务前&#xff0c;建立客户单连接 如下图&#xff0c;可以看出&#xff0c;只有两个客户端提供者&#xff0c;一个是YarnClient&#xff0c;一个是LocalClient。 显然&a…

ChatGPT4写2024高考作文:在AI时代,人们对于问题的数量是否会减少?

文章目录 在AI时代&#xff0c;人们对于问题的数量是否会减少&#xff1f; 在AI时代&#xff0c;人们对于问题的数量是否会减少&#xff1f; 在人工智能&#xff08;AI&#xff09;的时代&#xff0c;人们对于问题的数量是否会减少&#xff0c;这是一个引人深思的话题。随着AI…

AttributeError: ‘ChatGLMModel‘ object has no attribute ‘prefix_encoder‘

AttributeError: ‘ChatGLMModel‘ object has no attribute ‘prefix_encoder‘&#xff1a;全面解析 问题概述 当您使用 ChatGLM 模型或相关库时遇到 AttributeError: ‘ChatGLMModel‘ object has no attribute ‘prefix_encoder‘ 错误时&#xff0c;这意味着 ChatGLMMod…

Objective-C 学习笔记 | 基础

Objective-C 学习笔记 | 基础 参考书&#xff1a;《Objective-C 编程&#xff08;第2版&#xff09;》 第1部分 入门 Objective-C语言是以C语言为基础的&#xff0c;但增加了对面向对象编程的支持。Objective-C语言是用来开发在苹果iOS以及OS X操作系统上运行的应用的编程语…

植物大战僵尸杂交版 2.0 下载及配置图文教程

文章目录 Part.I IntroductionPart.II 下载Chap.I 下载地址Chap.II 网盘直链下载 Part.III 配置Chap.I 解压与安装Chap.II 加载存档Chap.III 其他设置 Reference Part.I Introduction 最近看大仙儿直播植物大战僵尸&#xff0c;觉得挺好玩的。它大概长这样&#xff1a; 就上网…

使用proteus仿真51单片机的流水灯实现

proteus介绍&#xff1a; proteus是一个十分便捷的用于电路仿真的软件&#xff0c;可以用于实现电路的设计、仿真、调试等。并且可以在对应的代码编辑区域&#xff0c;使用代码实现电路功能的仿真。 汇编语言介绍&#xff1a; 百度百科介绍如下&#xff1a; 汇编语言是培养…

GPT-4o:OpenAI的最新篇章与深度探索

引言&#xff1a; 在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术持续引领着技术创新的步伐。自2023年引入以来&#xff0c;GPT系列模型一直以其卓越的语言生成能力而闻名&#xff0c;近期的迭代——GPT-4o&#xff0c;更是为这一领域的研究和应用带…

指令调度和延迟分支

指令调度和延迟分支是计算机体系结构中的两个重要概念,特别是在处理CPU效率优化方面。以下是关于这两个概念的详细解释: 指令调度(Instruction Scheduling) 定义: 指令调度是指对程序块或过程中的操作进行排序以有效利用处理器资源的任务。其目的是通过重排指令,提高指…

Python GUI编程:深入探索现代GUI库及其创新应用

目录 引言 Python GUI库概览 1. Tkinter 2. PyQt/PySide 3. wxPython 4. Kivy 5. PyGTK 6.FLTK (pyFLTK) 创新应用案例 1. 交互式数据分析工具 2. 智能物联网(IoT)仪表板 3. 增强现实(AR)辅助设计软件 4. 跨平台的科学计算软件 5. 交互式教育软件 实战示例1&…

Outlook设置邮箱签名

设置Outlook邮箱签名的步骤可以根据你所使用的Outlook版本&#xff08;如Windows、Mac或网页版&#xff09;有所不同。以下是针对不同版本Outlook设置签名的详细步骤&#xff1a; Windows版Outlook 启动Outlook&#xff1a;打开Windows中的Outlook应用程序。进入签名设置&…

Hive 面试题(八)

1. 简述Hive的三种自定义函数是什么&#xff1f;实现步骤与流程&#xff1f;它们之间的区别&#xff1f;作用是什么 &#xff1f; Hive提供了三种类型的自定义函数&#xff08;UDF&#xff09;&#xff1a;用户定义的标量函数&#xff08;UDF&#xff09;、用户定义的聚合函数…

.NET MAUI 了解MVVM

MVVM 模式中有三个核心组件&#xff1a;模型、视图和视图模型。 每个组件的用途不同。 下图显示了这三个组件之间的关系。 视图 视图负责定义用户在屏幕上看到的结构、布局和外观。 理想情况下&#xff0c;每个视图在 XAML 中定义&#xff0c;代码隐藏有限&#xff0c;不包含业…

linux shell实现打印国际象棋棋盘

chess.sh #!/bin/bashfor i in {1..8} dofor j in {1..8}dosum$[ij]if [ $[sum%2] -eq 0 ];thenecho -ne "\033[46m \033[0m"elseecho -ne "\033[47m \033[0m"fidoneecho done验证&#xff1a;

微信小程序学习笔记(4)

文章目录 1、< template >< / template >2、样式导入i、wxmlii、wxss 3、flex布局i、容器属性ii、项目属性 1、< template >< / template > 模板可以重复调用 首先要定义一个模板&#xff1a; <template name"test"><view>{{…

深入了解Git:从数据模型到集成IDEA

Git是现代软件开发中不可或缺的版本控制工具。理解Git的数据模型、暂存区、命令行接口&#xff0c;并将其集成到IDE&#xff08;如IntelliJ IDEA&#xff09;&#xff0c;可以显著提升开发效率。本文将从底层开始&#xff0c;逐步深入Git的各个方面&#xff0c;并介绍如何将其集…

AbstractMap和SimpleEntry

一、AbstractMap 位置&#xff1a;在java.util包 二、SimpleEntry 1、概述 继承了Map中的内部接口Entry<K,V> SimpleEntry<K,V>不仅继承了Map.Entry<K,V>&#xff0c;还继承了序列化的接口 2、构造方法 方法说明SimpleEntry(K key,V value)通过键值对初…