Python中的Dunder方法实现小结
作者:老赵全栈实战
本文主要介绍了Python中的Dunder方法实现小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
📅 今日知识点
- 核心主题:深入理解Python中的dunder(魔术)方法
- 适用场景:面向对象编程、自定义类行为、提升代码可读性
🧠 什么是Dunder方法?
Dunder方法(Double Underscore Methods)是Python中以双下划线开头和结尾的特殊方法,例如 __init__、__str__ 等。它们允许我们自定义类的行为,让对象支持运算符、打印、迭代等功能。
🔧 核心Dunder方法分类与示例
1. 初始化与销毁
__init__(self, ...)
用途:对象创建时自动调用,用于初始化属性。
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
s = Student("张三", 95)
print(s.name) # 输出: 张三
__del__(self)
用途:对象销毁前调用,可用于清理资源。
class FileHandler:
def __del__(self):
print("文件句柄已释放")
2. 字符串表示
__str__(self)
用途:定义 print(obj) 或 str(obj) 的输出。
class Car:
def __init__(self, brand):
self.brand = brand
def __str__(self):
return f"汽车品牌: {self.brand}"
car = Car("特斯拉")
print(car) # 输出: 汽车品牌: 特斯拉
__repr__(self)
用途:开发者调试时显示的内容,建议返回可重构对象的表达式。
def __repr__(self):
return f'Car("{self.brand}")'
3. 运算符重载
__add__(self, other)
用途:定义 + 运算符的行为。
class Vector: def __init__(self, x, y): self.x = x self.y = y def __add__(self, other): return Vector(self.x + other.x, self.y + other.y) v1 = Vector(1, 2) v2 = Vector(3, 4) v3 = v1 + v2 print(v3.x, v3.y) # 输出: 4 6
__eq__(self, other)
用途:定义 == 比较逻辑。
def __eq__(self, other): return self.x == other.x and self.y == other.y
4. 容器行为
__len__(self)
用途:支持 len(obj)。
class MyList: def __init__(self, data): self.data = data def __len__(self): return len(self.data) ml = MyList([1, 2, 3]) print(len(ml)) # 输出: 3
__getitem__(self, key)
用途:支持 obj[key] 访问。
def __getitem__(self, index): return self.data[index]
5. 可调用对象
__call__(self, ...)
用途:让实例可以像函数一样被调用。
class Multiplier: def __init__(self, factor): self.factor = factor def __call__(self, x): return x * self.factor double = Multiplier(2) print(double(5)) # 输出: 10
🚀 实战案例:自定义分数类
class Fraction:
def __init__(self, numerator, denominator):
self.numerator = numerator
self.denominator = denominator
def __str__(self):
return f"{self.numerator}/{self.denominator}"
def __add__(self, other):
new_num = self.numerator * other.denominator + other.numerator * self.denominator
new_den = self.denominator * other.denominator
return Fraction(new_num, new_den)
f1 = Fraction(1, 2)
f2 = Fraction(1, 3)
result = f1 + f2
print(result) # 输出: 5/6
❗ 注意事项
- 不要滥用dunder方法,保持代码清晰易懂
- 遵循Python惯例,避免自定义非标准的dunder方法
- 测试边界条件,确保方法行为符合预期
💡 小贴士
- 学会阅读官方文档了解经常使用的dunder方法
- 利用IDE提示快速查找相关方法
- 多实践,从简单类开始逐步掌握复杂用法
到此这篇关于Python中的Dunder方法实现小结的文章就介绍到这了,更多相关Python Dunder方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
