总结
豆包 AI 助手文章总结

Python中Dunder方法 特殊方法__xx__在Python中的运算符重载

尼克
发布: 2025-06-08 14:39:03
原创
193人浏览过

dunder方法是python中以双下划线开头和结尾的特殊方法,用于实现类的运算符重载和内置行为。它们让自定义类可以支持如加法、比较、字符串表示等操作,例如\_\_add\_\_实现加法,\_\_eq\_\_和\_\_lt\_\_实现等于和小于比较,\_\_len\_\_实现长度获取。使用时需注意:1. 不要滥用,避免语义不清的操作;2. 保持一致性,如实现\_\_add\_\_的同时考虑\_\_radd\_\_;3. 返回合适类型,通常返回新对象而非修改原对象;4. 符合不可变性预期。可通过dir()函数查看类的dunder方法,帮助调试或学习代码。

在Python中,Dunder方法(也叫“魔术方法”)是以双下划线开头和结尾的方法,比如__init__、__add__等。它们让类可以支持像加法、减法、字符串表示这样的操作。最常见的用途之一就是运算符重载,也就是让自定义对象可以使用像+、-这样的操作符。


什么是Dunder方法?

Dunder是“Double UNDERscore”的缩写,这些方法不是随便写的,而是Python解释器会自动调用的特殊方法。例如:

  • 当你写a + b时,实际上是调用了a.__add__(b)
  • 当你打印一个对象时,调用的是它的__str__或__repr__

它们的存在是为了让我们能够为自定义类实现类似内置类型的行为。


如何用Dunder方法实现运算符重载?

如果你想让你的类支持加法、比较、长度获取等功能,就需要实现对应的Dunder方法。下面是一些常用的例子:

立即学习Python免费学习笔记(深入)”;

加法:__add__

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

    def __add__(self, other):
        return Point(self.x + other.x, self.y + other.y)
登录后复制

这样就可以这样写:

p1 = Point(1, 2)
p2 = Point(3, 4)
p3 = p1 + p2  # 实际上调用的是 p1.__add__(p2)
登录后复制

比较:__eq__ 和 __lt__

如果你希望两个对象可以用==或

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

def __lt__(self, other):
    return (self.x < other.x) or (self.x == other.x and self.y < other.y)
登录后复制

这样你可以直接写:

p1 == p2
p1 < p2
登录后复制

获取长度:__len__

假设你的类有一个可度量的长度,比如一个向量:

def __len__(self):
    return int((self.x**2 + self.y**2)**0.5)
登录后复制

然后你可以:

vec = Vector(3, 4)
print(len(vec))  # 输出 5
登录后复制

常见问题与注意事项

  • 不要滥用:并不是所有操作都需要重载。比如给一个用户类加上+操作可能让人困惑。
  • 保持一致性:如果你实现了__add__,最好也考虑是否需要实现__radd__以支持反向加法。
  • 返回合适的类型:比如加法应该返回新的对象而不是修改原对象。
  • 注意不可变性:像+操作通常不会改变原对象,这一点要符合预期。

小技巧:如何查看一个类有哪些Dunder方法?

你可以用dir()函数看看某个类或实例有哪些可用的Dunder方法:

dir(Point)
登录后复制

或者只看以双下划线开头的方法:

[m for m in dir(Point) if m.startswith('__') and m.endswith('__')]
登录后复制

这在调试或学习别人的代码时特别有用。


基本上就这些了。Dunder方法看起来高级,但其实只要理解了它们的作用机制,就能很自然地用好它们。关键是在合适的时候用,别为了炫技而用。

以上就是Python中Dunder方法 特殊方法__xx__在Python中的运算符重载的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
豆包 AI 助手文章总结
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号