【Python】解密Python中的魔法方法:使用 __str__、__repr__、__call__等方法提升类的功能与灵活性

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界

Python 中的魔法方法是一种强大的特性,它们允许开发者为类添加特殊行为,从而使类能够模拟内置对象或实现自定义行为。本文将深入探讨Python中常用的魔法方法,如 __str____repr____call__ 等,通过丰富的代码示例详细解析这些方法的实现方式和应用场景。文章中会展示如何运用魔法方法使类支持多种表现形式、自定义输出、作为函数调用等功能。通过对这些方法的掌握,开发者可以提升代码的可读性、灵活性和可扩展性,深入理解Python的面向对象编程特性。


正文

目录
  1. 引言:什么是Python中的魔法方法?
  2. __str____repr__:类的字符串表示
  3. __call__:让类的实例可调用
  4. 其他常用魔法方法
    • __len__
    • __getitem____setitem__
    • __add____sub__ 等运算符重载
  5. 组合使用魔法方法实现复杂行为
  6. 魔法方法的实际应用场景
  7. 总结

1. 引言:什么是Python中的魔法方法?

在Python中,魔法方法(Magic Methods)也称为双下划线方法(Dunder Methods),指的是以双下划线开头和结尾的方法,如 __init____str____call__ 等。魔法方法允许类与Python的内建操作符和方法进行交互,从而支持运算符重载、对象字符串表示、可调用性等高级特性。魔法方法的合理运用可以让代码更加简洁、易读,并提升代码的表现力和功能性。

2. __str____repr__:类的字符串表示

__str____repr__ 方法用于定义对象的字符串表示形式,分别在 print()repr() 函数调用时触发。

  • __str__:用于为用户提供易读的输出。
  • __repr__:用于开发者调试,提供对象的准确描述。
2.1 __str__ 方法

__str__ 方法返回一个用户友好的字符串表示:

class Book:def __init__(self, title, author):self.title = titleself.author = authordef __str__(self):# 返回适合用户查看的友好信息return f"《{self.title}》 by {self.author}"# 测试
book = Book("Python编程", "Guido van Rossum")
print(book)  # 输出: 《Python编程》 by Guido van Rossum

在上述代码中,__str__ 方法用于返回图书的简洁描述,供用户阅读。

2.2 __repr__ 方法

__repr__ 方法返回一个较为精准的对象表示,通常用于调试和开发:

class Book:def __init__(self, title, author

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

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

相关文章

面试高频问题:C/C++编译时内存五个分区

在面试时,C/C++编译时内存五个分区是经常问到的问题,面试官通过这个问题来考察面试者对底层的理解。在平时开发时,懂编译时内存分区,也有助于自己更好管理内存。 目录 内存分区的定义 内存分区的重要性 代码区 数据区 BSS区 堆区 栈区 静态内存分配 动态内存分配…

Nginx转发MySQL端口及添加stream模块

1.在nginx.conf的http同级添加stream配置 stream { upstream mysql_server{ server 192.168.23.25:3306; } server { listen 8560; proxy_pass mysql_server; } } http { .... } 启动nginx后发现报错…

启用 iPhone 原生的五笔输入

聊聊如何在 iOS 中使用原生的五笔输入法 本文虽然介绍的是如何添加五笔键盘,其实其他键盘(双拼,外语键盘、第三方输入法)也是类似的添加方式。 ‍ 使用原生的理由 虽然之前的文章列了不少第三方的五笔输入法,但其实…

《天文学进展》

《天文学进展》是中国天文学会所属学术期刊,季刊,发表反映国内外天文学各分支学科最新研究成果的学术性稿件,包括述评、前沿介绍、专题讲座、研究简讯、学术活动报道以及高质量的研究论文等。投给《天文学进展》的文章必须未在其他任何地方、…

GAN在AIGC中的应用

生成对抗网络(GAN)自2014年由伊恩古德费罗(Ian Goodfellow)等人提出以来,已成为推动人工智能生成内容(AIGC)领域发展的关键技术。GAN通过其独特的生成器和判别器结构,以及两者之间的…

了解DEA算法

在信息安全领域,加密算法是保护数据机密性、完整性和可用性的关键工具。随着技术的不断进步和威胁的不断演变,各种加密算法应运而生,以满足不同场景下的安全需求。其中,DEA算法(尽管“DEA”并非一个广泛认知的加密算法…

Spring Boot与gRPC的整合

一、gRPC的介绍 在gRPC中,客户机应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使您更容易创建分布式应用程序和服务。与许多RPC系统一样,gRPC基于定义服务的思想,指定可以远程调用的…

代理IPv6知识分享课堂二

嗨朋友们,欢迎来到今天的代理IPv6知识分享课堂,小蝌蚪上堂课跟大家一起认识了它的概念和工作原理等基础内容,我们算是对它有了一个初步的了解,那今天这节课我们讲的会深入点,我们今天来了解了解它的应用场景和切实地教…

恋爱脑学Rust之dyn关键字的作用

在 Rust 语言中,dyn 关键字允许我们在使用特征时创建“动态派发”——即通过一个统一的接口操作多种类型的具体实现。可以把它理解成一种“浪漫的妥协”:当我们不知道未来会爱上谁,只知道对方一定具有某种特征时,dyn 就像一个协议…

android浏览器源码 可输入地址或关键词搜索 android studio 2024 可开发可改地址

Android 浏览器是一种运行在Android操作系统上的应用程序,主要用于访问和查看互联网内容。以下是关于Android浏览器的详细介绍: 1. 基本功能 Android浏览器提供了用户浏览网页的基本功能,如: 网页加载:支持加载静态…

Sketch下载安装,中文版在线免费用!

Sketch是一款轻便、高效的矢量设计工具,全球众多设计师借助它创造出了无数令人惊叹的作品。Sketch在下载安装方面,其矢量编辑、控件以及样式等功能颇具优势,不过,Sketch中文版即时设计在下载安装方面也毫不逊色。即时设计是一个一…

Golang | Leetcode Golang题解之第526题优美的排列

题目&#xff1a; 题解&#xff1a; func countArrangement(n int) int {f : make([]int, 1<<n)f[0] 1for mask : 1; mask < 1<<n; mask {num : bits.OnesCount(uint(mask))for i : 0; i < n; i {if mask>>i&1 > 0 && (num%(i1) 0 |…

8进制在线编码工具--实现8进制编码

具体前往&#xff1a;文本转八进制在线工具-将文本字符串转换为8进制编码,支持逗号&#xff0c;空格和反斜杠分隔符

基于hive分析Flask为后端框架echarts为前端框架的招聘网站可视化大屏项目

基于hive分析Flask为后端框架echarts为前端框架的招聘网站可视化大屏项目 1. 项目概述 项目目标是构建一个大数据分析系统&#xff0c;包含以下核心模块&#xff1a; 1、数据爬取&#xff1a;通过request请求获取猎聘网的就业数据。 2、数据存储和分析&#xff1a;使用 Hive …

SpringBoot【实用篇】- 配置高级

文章目录 目标&#xff1a;1.ConfigurationProperties2.宽松绑定/松散绑定3. 常用计量单位绑定4.数据校验 目标&#xff1a; ConfigurationProperties宽松绑定/松散绑定常用计量单位绑定数据校验 1.ConfigurationProperties ConfigurationProperties 在学习yml的时候我们了解…

QT 机器视觉 (3. 虚拟相机SDK、测试工具)

本专栏从实际需求场景出发详细还原、分别介绍大型工业化场景、专业实验室场景、自动化生产线场景、各种视觉检测物体场景介绍本专栏应用场景 更适合涉及到视觉相关工作者、包括但不限于一线操作人员、现场实施人员、项目相关维护人员&#xff0c;希望了解2D、3D相机视觉相关操作…

数字ic/FPGA,Windows/Linux系统,其他相关领域,软件安装包(matlab、vivado、modelsim。。。)

目录 一、总述 二、软件列表 1、modelsim_10.6c 2、notepad 3、matlab 4、Visio-Pro-2016 5、Vivado2018 6、VMware15 7、EndNote X9.3.1 8、Quartus 9、pycharm 10、CentOS7-64bit 一、总述 过往发了很多数字ic设计领域相关的内容&#xff0c;反响也很好。 最近…

【5.5】指针算法-三指针解决颜色分类

一、题目 给定一个包含红色、白色和蓝色&#xff0c;一共n个元素的数组&#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 此题中&#xff0c;我们使用整数0、1和2分别表示红色、白色和蓝色。 示例 1&#xff1…

刘艳兵-DBA023-控制文件是Oracle 数据库用来查找数据库文件,控制文件包含以下哪些信息:

控制文件是Oracle 数据库用来查找数据库文件&#xff0c;控制文件包含以下哪些信息&#xff1a; A 表空间信息 B 创建数据库的时间戳 C 有关数据文件、 联机重做日志文件、和归档重做日志文件的信息 D 数据库名称和数据库唯一标识符&#xff08;DBID) E RMAN备份…

3. 探索 Netty 的粘包与拆包解决方案

序言 在网络编程中&#xff0c;粘包和拆包现象常常是开发者在数据传输时遇到的棘手问题。如果消息在传输过程中没有正确的分包和组合&#xff0c;接收方可能会收到一组拼接在一起的数据&#xff08;粘包&#xff09;&#xff0c;或者一条消息被拆分成了不完整的部分&#xff0…