11个Python开发者必知必会的魔术方法(上)

Python3中的魔术方法汇总 1.魔术方法简介 Python 中的魔术方法(Magic)方法,是那些被__包围的方法,在对象继承时,子类可以重写父类的魔术方法以实现定制功能,用于增强Python面向对象编程的能力。魔术方法在创建对象或对象操作时自动调用,不需要显式使用。譬如当我们判断对象是否相等时只使用了==符号,并未显式调用__eq__方法,但却实现了判断两个实例是否相等的功能,犹如变魔法一般。魔术方法按功能可分为如下几类, 1.构造、初始化和析构对象 2.控制属性读写 3.对象的表示和描述,如__str__等 4.在定制类对象间支 阅读详情

图片

简介

图片

在Python中,魔术方法可以帮助模拟内置函数在Python类中的行为。这些方法的名称前后都有双下划线(__),因此也被称为双下划线(dunder)方法。

这些魔术方法还可以帮助在Python中实现运算符重载。简单列举一些常见的例子,比如使用乘法运算符*将两个整数相乘得到乘积。而将它与一个字符串和一个整数k结合使用时,则会将该字符串重复k次:

 >>> 3 * 4
12
>>> 'code' * 3
'codecodecode'

在这里,我们将通过创建一个简单的二维向量Vector2D类来探索Python中的魔术方法。

我们将从你可能熟悉的方法开始,并逐渐过渡到更有帮助的魔术方法。

接下来我们开始编写一些魔术方法吧!

1、__init__

考虑以下的Vector2D类:

class Vector2D:
    pass

当创建一个类并实例化一个对象时,可以像这样添加属性:obj_name.attribute_name = value。

不过,与其在创建的每个实例中手动添加属性,还不如在实例化对象时用一种方法来初始化这些属性。

为此,我们可以定义__init__方法。接下来让我们为Vector2D类定义__init__方法:

class Vector2D:
    def __init__(self, x, y):
        self.x = x
        self.y = y

v = Vector2D(3, 5)

2、__repr__

当你尝试检查或打印实例化的对象时,会发现并没有得到任何有用的信息。

v = Vector2D(3, 5)
print(v)
Output >>> <__main__.Vector2D object at 0x7d2fcfaf0ac0>

这就是为什么应该添加一个表示字符串,即对象的字符串表示形式。为此,可以添加一个__repr__方法,如下所示:

class Vector2D:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Vector2D(x={self.x}, y={self.y})"

v = Vector2D(3, 5)
print(v)
Output >>> Vector2D(x=3, y=5)

__repr__应包含创建类的实例所需的所有属性和信息。__repr__方法通常用于调试。

3、__str__

__str__也用于添加对象的字符串表示形式。一般来说,__str__方法用于向类的最终用户提供信息。

接下来为我们的类添加一个__str__方法:

class Vector2D:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return f"Vector2D(x={self.x}, y={self.y})"

v = Vector2D(3, 5)
print(v)
Output >>> Vector2D(x=3, y=5)

如果没有__str__的实现,它就会回退到__repr__。因此,对于你创建的每个类,至少应该添加一个__repr__方法。

4、__eq__

接下来,让我们添加一个方法来检查任意两个Vector2D类的对象是否相等。如果两个向量对象具有完全相同的x和y坐标,则它们是相等的。

现在创建两个x和y坐标值均相等的Vector2D对象,并比较它们是否相等:

v1 = Vector2D(3, 5)
v2 = Vector2D(3, 5)
print(v1 == v2)

结果是False。因为默认情况下,“比较”会检查的是内存中对象的ID是否相等。

Output >>> False

接下来添加__eq__方法来检查是否相等:

class Vector2D:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Vector2D(x={self.x}, y={self.y})"

    def __eq__(self, other):
        return self.x == other.x and self.y == other.y

现在,相等性检查应该可以按预期工作:

v1 = Vector2D(3, 5)
v2 = Vector2D(3, 5)
print(v1 == v2)
Output >>> True 

5、__len__

Python的内置len()函数可以帮助计算内置可迭代对象的长度。对于一个向量来说,长度应该返回向量包含的元素数量。

因此,为Vector2D类添加一个__len__方法:

class Vector2D:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __repr__(self):
        return f"Vector2D(x={self.x}, y={self.y})"

    def __len__(self):
        return 2

v = Vector2D(3, 5)
print(len(v))

所有的Vector2D类对象的长度都是2:

Output >>> 2

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方优快云官方认证二维码或者点击链接免费领取【保证100%免费】

Python复现2024年春晚刘谦魔术 生成一幅完整的扑克牌牌组。然后直接洗牌(random),随机抽取4张牌。然后获取用户名,性别,地区。定义口诀名为:‘见证奇迹的时刻’。# 定义一个名为CardGame的类# 定义初始化函数# 定义四种花色self.suits = ['红桃', '方块', '梅花', '黑桃']# 定义十三种牌面# 定义两种大小王self.jokers = ['小王', '大王']# 生成一副完整的牌# 打乱这副牌# 随机抽取四张牌# 打印出抽取的四张牌。 阅读详情

相关推荐

Python魔术方法

在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”(魔术方法。 常用的魔术方法详解: 1__init__:构造器,当一个实例被创建的时候调用的初始化方法 class Test: def __init__(self): print("__init__方法") Test() __init__方法 2__new__:在对象初始化之前调用的第一个方法 正常定义的类是继承于Object类,而使用的是父类里面的__new__方法,如果重写new方法要调用

一条到晚游泳的鱼 490

11个Python开发者必知必会的魔术方法(下)

_add__现在,让我们思考一些在向量上执行的常见操作。添加对任意两个向量进行加减运算的魔术方法。如果直接尝试将两个向量对象相加,将遇到错误。因此,应该添加一个__add__

python1234_的博客 977

ArcGIS学习记录—SHP文件转换为KML KMZ数据,并显示面要素相应的标注

使用相应软件操作获取KMZ数据得以下发到外业调查人员,使得矢量数据能够更显而易见,可视化,让外业人员的工作减轻许多。(过程步骤是借鉴于网络上的相关人士给的建议,根据这些建议自己做出来的步骤,可能有些粗略,有问题的话可以再进行探讨)...

qq_41046162的博客 5万+

python高级知识之常用的魔术方法

1、__init__()魔术方法 2、__new__()魔术方法 3、__str__()魔术方法 4、__del__()魔术方法 5、__call__()魔术方法 6、__len__()魔术方法 7、__eq__()魔术方法 8、__hash__()魔术方法 9、__getitem__()魔术方法 10、__setitem__()魔术方法 11、__delitem__()魔术方法 12、__delattr__()魔术方法 13、__add__()/__sub__()魔术方法

克里斯蒂亚诺 5006

AI Agent评估:指标、策略与最佳实践

AI智能体正逐渐融入到各个领域,从日常的对话助手到复杂的工作流程自动化,其应用范围不断拓展。然而,确保这些智能体能够可靠、高效地完成任务至关重要,这就使得AI智能体评估成为了人工智能发展过程中不可或缺的一环。本文将深入探讨AI智能体评估的指标、策略以及最佳实践,为读者全面解读这一关键领域。

llm_way的博客 3498

cMake编译 VS2026+opencv4.12.0+opencv_contrib-4.12.0

本文提供了OpenCV 4.12.0集成CUDA、cuDNN和ONNX Runtime的详细编译指南。主要步骤包括:准备Visual Studio 2026、CMake 4.2.0、CUDA 12.6和cuDNN 9.16.0;设置无空格和中文的路径结构;配置关键CMake变量(如开启CUDA支持、指定路径等);以及最终的编译安装过程。注意事项包括:版本一致性检查、cuDNN文件复制、国内用户需手动获取.cache文件等。文章还提供了常见问题解决方案,如通过设置CUDA_NVCC_FLAGS参数解决VS版本

weixin_46624734的博客 1383

11 python 魔术方法

python 魔术方法 常用魔术方法 魔术方法就是一个类的特殊方法,和普通方法唯一的不同时,普通方法需要调用!而魔术方法由系统自动调用。 1.__init__ 初始化魔术方法 触发时机:初始化对象时触发(不是实例化触发,但是和实例化在一个操作中) 参数:至少有一个self,接收对象 返回值:无 作用:初始化对象的成员 2.__new__ 实例化魔术方法 类方法 触发时机: 在实例化对象时触发 参数:至少一个cls 接收当前类 返回值:必须返回一个对象实例 作用:实例化对象 注意:实例化对象是Obj

Tian_baby的博客 440

从零实现地震波场模拟:交错网格有限差分法核心代码精讲

本文详细介绍了从零实现地震波场模拟的核心技术,重点讲解了交错网格有限差分法的实现过程。通过速度-应力弹性波方程的离散化处理,结合代码实例演示了应力与速度更新的关键步骤,并分享了震源加载、稳定性条件等实用技巧,为计算地球物理学研究提供实践指导。

weixin_42556197的博客 410

【Python编程-从入门到实践】练习题8-9 魔术师、练习题8-10 了不起的魔术师、练习题8-11 不变的魔术师

练习题8-9 魔术师: 1.创建一个包含魔术师名字的列表,并将其传递给一个名为show_magicians()的函数,这个函数打印列表中每个魔术师的名字。 def show_magicians(magician_b): """显示魔术师""" for magician in magician_b: print(magician) m = ['魔术师1', '魔术师...

weixin_43096078的博客 3702

Mcgs 屏幕Modbus RTU通讯调试

昆仑通态屏幕作为Modbus Master 与 Modbus Slave通过RS485接口实现通信的调试记录

madao1234的博客 5568

从贝叶斯网络到结构因果模型:因果推理在可解释AI中的实践

在机器学习和数据分析领域,理解变量间的因果关系而不仅仅是统计关联,是构建可信赖、可解释系统的关键。概率图模型,特别是贝叶斯网络,通过有向无环图和条件概率表,能够高效地编码和推理变量间的条件依赖关系,广泛应用于医疗诊断、风险评估等场景。然而,贝叶斯网络主要刻画的是“是什么”的关联,难以回答“如果…会怎样”的因果问题。为了进行因果推断,需要引入结构因果模型和do-演算,它们通过定义结构方程和模拟干预操作,能够区分混杂效应,估计处理变量对结果变量的净因果影响。这一套方法论对于可解释人工智能至关重要,它能生成反事实

weixin_42168902的博客 379

Python面试宝典11 | 魔术方法,让你的类“活”起来

Python的魔术方法(Magic Methods)是Python中一类特殊的方法,它们以双下划线`__`开头和结尾,例如`__init__`、`__str__`等。这些方法在特定的时候会被自动调用,赋予了Python类强大的灵活性和可定制性。

多森的博客 1040

8、鼠疫流行过程的计算机建模介绍

本博文介绍了一种基于概率细胞自动机和蒙特卡罗方法的计算机模型,用于模拟由大沙鼠传播的鼠疫流行过程。结合GIS和遥感技术,该模型能够分析鼠疫在不同聚居地类型和季节变化下的传播特征,揭示了群落密度、分布及流行接触率对鼠疫传播的影响。研究还验证了模型与自然流行过程的一致性,并探讨了鼠疫在宿主数量低谷时的持续机制。模型为鼠疫防控和流行病研究提供了定量分析工具。

x2y3z4a5b的博客 104

Python编程从入门到实践:动手试一试8-9,8-10,8-11魔术师和了不起的魔术师以及不变的魔术师

8-9 魔术师:创建一个包含魔术师名字的列表,并将其传递给一个名为show_magicians() 的函数,这个函数打印列表中每个魔术师的名字 看到这个题目,啥也不说了,先整起来,创建列表走起,主要是想打印出来显示结果,又搞了个空列表,反正不知道对不对,先整起来在说,对不对,有老师大神们去评判,反正是运行出来了 #创建一个包含魔术师名字的列表,并将其传递给一个名为show_magic...

python入门新手的专栏 2167

[ vulhub漏洞复现篇 ] ActiveMQ反序列化漏洞复现(CVE-2015-5254)

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。......

qq_51577576的博客 4444

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Python之魔术方法

Python魔术方法 __开头,__结尾的方法就是魔术方法. 1.__str__格式化输出对象 __repr__表示对象本身 class A: def __str__(self): return 'This is A' # 表示对象本身 def __repr__(self): return "I'm a A" a = A(...

weixin_43896774的博客 252

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Python 魔术方法

Python 魔术方法 官方网站:https://docs.python.org/3/reference/datamodel.html 魔法函数是以双下划线开头并且以双下划线结尾的功能函数,可以用来定义自己类的新特性。 举两个例子: import collections Card = collections.namedtuple('Card', ['rank', 'suit']) c...

健康工作每一天 514

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python---魔术方法

在Python中,__xxx__()的函数叫做魔法方法,指的是具有特殊功能的函数。提到魔术方法:① 这个方法在什么情况下被触发 ② 这个方法有什么实际的作用__init__():初始化方法或者称之为“构造函数”,在对象初始化时执行,其主要作用就是在对象初始化时,对对象进行初始化操作(如赋予属性)__str__():对象字符串方法,当我们在类的外部,使用print方法输出对象时被触发,其主要功能就是对对象进行打印输出操作,要求方法必须使用return返回字符串格式的数据。__del__()

qq_42755734的博客 1489

11个Python开发者必会的魔术方法(下)

大家好,我们接上文,继续讲解Python开发者必会的魔术方法。

csdn1561168266的博客 123

python中的魔术方法

语句用于判断一个Python文件是被直接运行还是被导入为一个模块。可在文件中编写一些只有在文件被直接运行时才执行的代码,而在文件被导入为模块时不执行这些代码。而若文件是被导入为一个模块,__name__则会被设置为模块名,因此,if。若一个Python文件被直接运行,_name__会被设置__main。

weixin_42333247的博客 1181

Python-- 魔术方法

魔术方法特殊属性查看属性魔术方法分类实例化`__new__`可视化`__str__``__repr__``__bytes__`hash`__hash__``__eq__`总结练习bool`__bool__`运算符重载练习运算符重载应用场景@functools.total_ordering装饰器 特殊属性 查看属性 方法: __dir__ 意义: 返回类或者对象的所有成员名称列表 dir()函数...

python_lqx的博客 630

11个Python开发者必会的魔术方法(上)

在Python中,魔术方法可以帮助模拟内置函数在Python类中的行为。这些方法的名称前后都有双下划线(__),因此也被称为双下划线(dunder)方法。这些魔术方法还可以帮助在Python中实现运算符重载。简单列举一些常见的例子,比如使用乘法运算符将两个整数相乘得到乘积,而将它与一个字符串和一个整数k结合使用时,则会将该字符串重复k这里我们将通过创建一个简单的二维向量Vector2D类来探索Python中的魔术方法。

csdn1561168266的博客 224

流畅的python-魔术方法

正在看流畅python这本书,想把一些笔记写一下。这边借用《流畅的python》里面的描述:Python 的魔术方法(magic method)是特殊方法的昵称。一般是用“双下划线+名称+双下划线”形式来表示,整体念起来也拗口,所以也有人把这种特殊方法名为称为“双下方法”(dunder method)。 有关于特殊方法一览,可以参考Data model 这边借用文章第一章中字牌一个小例子来说一下实现魔术方法对python数据模型好处: ## test.py class FrenchDeck:

喝醉的鱼博客 253

2025-08-22 Python进阶10——魔术方法

Python魔术方法(特殊方法)是用于自定义类行为的双下划线方法,如__init__、__str__、__eq__等。它们会在特定场景自动触发,例如对象初始化、字符串输出、比较运算等。常用魔术方法包括:__init__初始化对象、__new__创建对象、__del__销毁对象、__str__提供用户友好输出、__repr__提供开发者精确描述、__eq__实现等于比较、__gt__实现大于比较等。这些方法使代码更简洁直观,支持Python的运算符重载和对象生命周期管理。

zheliku的博客 1155

python魔术方法abstract_Python 进阶之魔术方法

Python魔术方法__开头,__结尾的方法就是魔术方法.1.__str__格式化输出对象__repr__表示对象本身class A:def __str__(self):return 'This is A'# 表示对象本身def __repr__(self):return "I'm a A"a = A()print(a) # This is Aa # I'm a A2.__init__和 __...

weixin_34187444的博客 259

python中的魔术方法(特殊方法)

python的内置方法具有特殊的功能,这些内置方法我们也称之为魔术方法(magic method)或特殊方法(special method)。魔术方法就是前后各有两个下划线__的方法,像__init__方法就是一个魔术方法。python中的类提供了很多双下划线开头和结尾__xxx__的方法,这些方法是Python运行的基础,很多功能的背后都是通过调用这些内置方法来实现的。例如len()函数调用对象的__len__方法;print(obj)函数调用对象的__str__方法;for循环遍历语句调用对象的。

m0_46610658的博客 1335
上一篇: 10个Python中的数据类型技巧
下一篇: 11个Python开发者必知必会的魔术方法(下)
我爱学大模型
博客等级 码龄3年 7883粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值