我准备了下面的图表,列出了 Python 面向对象编程(OOP)中最常用的 20 种魔术方法:
据该领域的行业专家经验,这些可能是大多数使用 OOP 的 Python 项目中所需要的仅有的 20 种魔术方法。
从语法上讲,它们以双下划线作为前缀和后缀,例如 __len__, __str__等等。这就是为什么它们也被称为“Dunder 方法”的原因—— Double Underscore 的缩写。
以下是对每个魔术方法的简要介绍。
__new__
此方法在 __init__ 之前调用,为对象分配内存。
大多数情况下,我们用不到它。
然而,有时,我会用它来定义检查,并且仅在满足某些条件时分配内存。
另一个常见用法是定义单例类 —— 只有一个对象的类。
__init__
此列表中最常见。
在内存分配之后调用它来为对象的属性赋值。
__str__
执行 print(obj) 输出的是对象的内存地址,是不可解释的。
定义这个方法让我们可以以可读的格式打印对象。
__int__
当我们执行 → int(obj) 时调用。
__len__
当我们执行 → len(obj) 时调用。
__call__
当类对象作为函数调用时调用 → obj()。
我们之前在这里讨论过它。
__getitem__
当对象被索引时调用 → obj[key]。
__setitem__
当对象被索引并且设置值时调用 → obj[key]=value。
__delitem__
当对象的索引被删除时调用 → del obj[key]。
__contains__
当使用 in 运算符 → item in obj 时调用。
__bool__
当对象在布尔上下文中使用时调用→ if obj or bool(obj)。
__iter__
当我们迭代对象时调用 → for x in obj。
__eq__
当使用 == 运算符比较两个对象时调用 → obj1 == obj2。
__ne__
当使用 != 运算符比较两个对象时调用 → obj1 != obj2。
__gt__
当使用 > 运算符比较两个对象时调用→ obj1 > obj2。
除了 __gt__ 之外,我们还有:
__lt__:小于
__le__:小于或等于
__ge__:大于或等于
__add__
当两个对象相加时调用 → obj1 + obj2。
__mul__
当两个对象相乘时调用 → obj1 * obj2。
__abs__
当我们计算对象的绝对值时调用:abs(obj)。
__neg__
当在对象 → -obj 上使用一元运算符 -(减号)时调用。
__invert__
当使用 ~(波浪号)运算符反转对象 → ~obj 时调用。
通过上述内容,相信现在你对 Python 中最常见的魔法方法及其使用方法已经有一定了解。
此外,如果您真的想掌握 Python OOP,最好学习并掌握 Python 描述符,后续我们会专门讲到该主题。关注我,及时获取最新内容。
我发现它们在减少工作量和代码冗余方面有很大帮助,同时也使得整个实现更加优雅。
我是否遗漏了任意一个常见的魔术方法?如果有,是哪一个?欢迎留言告诉我📓
感谢你的阅读🧑🤝🧑
推荐阅读👇👇👇
10个Python自动化脚本,简化日常工作任务,看看有没有适合你的!
Python自动化:10个令人惊叹的自动化脚本,拿来即用,总有一款适合你!
Python高级编程:Functools模块的8个高级用法,强烈建议添加到你的开发工具箱中!
成为Python高手:掌握这5个核心技能,迈入编程精英行列!
Python高级技术:10个显著优化你代码的Python OOP 技术
- END -
🌟 喜欢这篇文章吗?给个赞支持一下吧!🌟
如果你发现今天的内容对你有帮助,不妨点个赞并关注我,第一时间接收更多关于Python、数据分析和机器学习的深入分析和最新趋势。我们一起探索数据的力量,解锁AI的潜能。你的每一次互动都是对我的极大鼓励,也是我们共同成长的动力!

👇👇👇 关注并开启星标提醒,让知识与技能的火花不断在你的职业道路上燃烧吧!
原文作者:数据派探险家;如有侵权,请联系管理员删除。