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

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

图片

6.__add__

现在,让我们思考一些在向量上执行的常见操作。添加对任意两个向量进行加减运算的魔术方法。

如果直接尝试将两个向量对象相加,将遇到错误。因此,应该添加一个__add__方法:

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 __add__(self, other):
        return Vector2D(self.x + other.x, self.y + other.y)

现在可以像这样将任意两个向量相加:

v1 = Vector2D(3, 5)
v2 = Vector2D(1, 2)
result = v1 + v2
print(result)
Output >>> Vector2D(x=4, y=7)

7、__sub__

接下来,添加一个__sub__方法来计算Vector2D类的任意两个对象之间的差值:

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 __sub__(self, other):
        return Vector2D(self.x - other.x, self.y - other.y)
v1 = Vector2D(3, 5)
v2 = Vector2D(1, 2)
result = v1 - v2
print(result)
Output >>> Vector2D(x=2, y=3)

8、__mul__

我们还可以定义一个__mul__方法来定义对象之间的乘法运算。

可以实现:

  • 标量乘法:向量与标量的乘法。
  • 内积:两个向量的点积。
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 __mul__(self, other):
        # Scalar multiplication
        if isinstance(other, (int, float)):
            return Vector2D(self.x * other, self.y * other)
        # Dot product
        elif isinstance(other, Vector2D):
            return self.x * other.x + self.y * other.y
        else:
            raise TypeError("Unsupported operand type for *")

现在我们举几个例子,来看看__mul__方法的实际应用。

v1 = Vector2D(3, 5)
v2 = Vector2D(1, 2)

# 标量乘法
result1 = v1 * 2
print(result1)  
# 点积
result2 = v1 * v2
print(result2)
Output >>>

Vector2D(x=6, y=10)
13

9、__getitem__

__getitem__魔术方法允许使用熟悉的方括号[]语法,对对象进行索引并访问属性或属性的片段。

对于Vector2D类的对象v:

  • v[0]:x坐标
  • v[1]:y坐标

如果尝试通过索引进行访问,将会遇到错误:

v = Vector2D(3, 5)
print(v[0],v[1])
---------------------------------------------------------------------------

TypeError                              Traceback (most recent call last)

 in ()
----> 1 print(v[0],v[1])

TypeError: 'Vector2D' object is not subscriptable

让我们来实现__getitem__方法:

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 __getitem__(self, key):
        if key == 0:
            return self.x
        elif key == 1:
            return self.y
        else:
            raise IndexError("Index out of range")

如下所示,现在可以使用索引访问元素了:

v = Vector2D(3, 5)
print(v[0])  
print(v[1])
Output >>>

3
5

10、__call__

通过使用__call__方法,可以像调用函数一样调用对象。

在Vector2D类中,我们可以使用一个__call__方法来按给定系数缩放向量:

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 __call__(self, scalar):
        return Vector2D(self.x * scalar, self.y * scalar)

因此,如果现在调用3,就会得到按3倍缩放的向量:

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

11、__getattr__

__getattr__方法用于获取对象特定属性的值。

对于这个示例,我们可以添加一个__getattr__魔术方法,当计算向量的幅值(L2-norm)时调用该方法:

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 __getattr__(self, name):
        if name == "magnitude":
            return (self.x ** 2 + self.y ** 2) ** 0.5
        else:
            raise AttributeError(f"'Vector2D' object has no attribute '{name}'")

现在来验证一下是否能按预期工作:

v = Vector2D(3, 4)
print(v.magnitude)
Output >>> 5.0

结论

这就是本教程的全部内容,介绍了一些最常用的魔术方法。

希望你学会了如何向类中添加魔术方法来模拟内置函数的行为,可以创建一个自己的Python类,并根据所需的功能添加魔术方法。

关于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开发者必知必会的魔术方法(上)

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

python1234_的博客 1051

CVE-2017-7921漏洞深度剖析:从身份验证绕过到实战复现与防御

身份验证是Web应用安全的核心防线,其逻辑缺陷可能导致严重的未授权访问。身份验证绕过漏洞的原理在于,应用程序对特定请求路径或API接口的访问控制策略存在疏漏,未能执行有效的会话或令牌校验。这类漏洞的技术价值在于,攻击者无需凭证即可直接访问受保护的后端资源,从而获取敏感信息或执行未授权操作,对系统机密性、完整性构成直接威胁。在物联网和安防监控领域,大量网络摄像头、录像机等设备暴露于公网,其Web管理界面便成为常见攻击面。本文聚焦于安防设备中一个经典的CVE-2017-7921身份验证绕过漏洞,通过剖析其技术原

WGH100817的博客 469

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

实例讲解Simulink CAN通讯丢失故障判定模型搭建及仿真测试验证方法

本文通过ABS通讯丢失故障触发、判定条件Simulink模型的搭建和仿真的讲解,介绍了一种控制器CAN通讯丢失故障判定的方法和建模方法,希望能给相关技术人员带来一定参考和帮助。

qq_43011586的博客 3684

Android 11.0 app添加校验锁(输入密码才能进入app)

11.0定制化开发中客户要求给app添加锁,就是点击app 图标时,会弹出Dialog,需要输入密码才能进入app中,就是应用校验锁, 最开始想到在Launcher3中实现,但是如果更换了默认Launcher 又不行了 所以最终还是得拦截app启动Activity 从这里入手了 Launcher与APP是在两个不同的进程中,他们之间的通信是通过Binder完成的,点击Launcher上的某个APP,这时会调用Launcher的startActivitySafely方法。 public boolean sta

安卓兼职framework和app工程师的博客 1952

11 python 魔术方法

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

Tian_baby的博客 440

[明道云] -基础教学1- 创建第一个工作表:从 0 到实用

明道云工作表相当于数据库表,是存储业务数据的核心组件。创建工作表主要有两种方式:1)从空白新建,通过添加字段(最多200个)、设置属性、配置表单样式;2)从Excel导入,需选择sheet、配置字段映射。创建后系统自动生成默认视图,支持多种视图形式(看板/日历等)。建议设置合适的标题字段和关联关系,初学者可在一小时内完成基础应用搭建。后续可扩展权限控制、工作流自动化等功能。

每日出拳老爷子的博客 556

【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

30天入门 SAP BTP 开发系列之八:动手在 SAP BTP 上开发第一个 ABAP 透明表

ABAP Cloud 环境下创建透明表的方法与数据迁移实践 本文介绍了在 SAP BTP ABAP 环境中创建透明表并迁移数据的完整流程。与传统的 SE11 事务码不同,ABAP Cloud 需通过 ABAP Development Tool 创建数据库表,使用代码定义表结构。作者详细演示了如何: 在开发包中创建名为 Z优快云_TRAVEL 的透明表 使用 ABAP 代码定义表字段和约束 通过 ABAP 类实现数据从标准表/DMO/TRAVEL 到新建表的迁移 验证数据迁移结果 文中还提供了相关技术概念的

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1782

踩坑实录:C#上位机YOLOv11从2FPS到45FPS,ONNX Runtime GPU加速全解析

算力迁移:将推理核心从CPU迁移至GPU(核心提速手段);内存复用:避免重复分配/释放内存,减少GC压力;维度固定:工业场景固定输入分辨率,关闭动态维度;资源限制:合理限制GPU/CPU/内存占用,避免资源耗尽;解耦设计:推理线程与UI线程解耦,避免跨线程问题。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 570

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

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

多森的博客 1040

微信小程序 - 最新图片组拖拽排序更换位置功能,类似微信朋友圈九宫格图片的拖动排序效果,微信小程序实现九宫格图片拖拽调换位置,小程序详细实现图像拖曳拖动切换位置排序功能(详细示例代码,一键复制开箱即用

微信小程序,wechat,小程序,图片排序,图像排序,九宫格拖拽排序,拖曳,拖动,拖拽,仿微信朋友圈,朋友圈宫格图片排序,微信朋友圈图片拖动排序效果,实现九宫格图片拖拽,图像拖拽排序组件插件,小程序实现拖拽图片切换图片位置,图片拖动互换位置,图像拖拽切换位置,九宫格图片组合拖动排序,交换九宫格图片的位置,小程序上传图片后,如何实现拖拽排序功能,小程序怎么实现图片拖拽排序,微信小程序图片上传,九宫格拖拽组件,选择图片并拖动_微信小程序图片拖拽,微信小程序长按拖拽排序,图像的拖拽移动,多图拖拽排序功能,实现九宫

✅ 精选推荐文章 4453

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

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

python入门新手的专栏 2167

[Dify实战] 合同审阅助手:识别风险条款、生成修改建议-带绑定资源

摘要: Dify合同审阅助手通过AI技术提升合同审阅效率,快速识别风险条款并输出结构化修改建议。方案包括合同输入、关键条款识别、风险评级和报告生成流程,重点关注付款、责任限制等核心条款。采用分层风险分级(高/中/低)和"红线清单"机制,确保审阅标准化。实施建议先建立条款库和模板,通过样本测试优化模型,定期更新规则库。该方案可缩短审阅时间50%以上,提高风险识别准确率,最终实现法务经验的可复用沉淀。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 595

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

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

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Python 魔术方法

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

健康工作每一天 514

IEM模型,地表粗糙度模拟

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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
上一篇: 11个Python开发者必知必会的魔术方法(上)
下一篇: Python处理图像五个有趣场景,很实用!
我爱学大模型
博客等级 码龄3年 7883粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值