Python中的Dunder方法实现小结

 更新时间:2026年03月09日 09:55:11   作者:老赵全栈实战  
本文主要介绍了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方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python利用beautifulSoup实现爬虫

    python利用beautifulSoup实现爬虫

    这篇文章主要介绍了python利用beautifulSoup实现爬虫,需要的朋友可以参考下
    2014-09-09
  • Python库如何打包到PyPI

    Python库如何打包到PyPI

    这篇文章主要介绍了Python库如何打包到PyPI问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 一文分享Python中五大高频使用的基础操作

    一文分享Python中五大高频使用的基础操作

    作为一个常年和 Python 打交道的 搬砖人,我发现很多新手甚至老手,都会忽略一些基础但超实用的小技巧,今天就来分享几个日常高频使用的 Python 基础操作吧
    2026-01-01
  • Python创建Excel的4种方式小结

    Python创建Excel的4种方式小结

    这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下
    2025-02-02
  • 通过Python脚本+Jenkins实现项目重启

    通过Python脚本+Jenkins实现项目重启

    Jenkins是一个流行的开源自动化服务器,用于快速构建、测试和部署软件,本文主要介绍了通过Python脚本+Jenkins实现项目重启,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • Python实现将绝对URL替换成相对URL的方法

    Python实现将绝对URL替换成相对URL的方法

    这篇文章主要介绍了Python实现将绝对URL替换成相对URL的方法,涉及Python字符串操作及正则匹配的相关技巧,需要的朋友可以参考下
    2015-06-06
  • CentOS中使用virtualenv搭建python3环境

    CentOS中使用virtualenv搭建python3环境

    virtualenv可以搭建虚拟且独立的python环境,可以使每个项目环境与其他项目独立开来,保持环境的干净,解决包冲突问题。下面我们来详细探讨下centos中如何来搭建。
    2015-06-06
  • 8个Python编程进阶常用技巧分享

    8个Python编程进阶常用技巧分享

    介绍 Python 炫酷功能的文章层出不穷,但是还有很多 Python 的编程小技巧鲜被提及,所以本文会试着介绍一些其它文章没有提到的小技巧,让我们一探究竟吧
    2023-07-07
  • Gradio机器学习模型快速部署工具应用分享前篇

    Gradio机器学习模型快速部署工具应用分享前篇

    这篇文章主要为大家介绍了Gradio机器学习模型快速部署工具应用分享前篇,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Python判断值是否在list或set中的性能对比分析

    Python判断值是否在list或set中的性能对比分析

    这篇文章主要介绍了Python判断值是否在list或set中的性能对比分析,结合实例形式对比分析了使用list与set循环的执行效率,需要的朋友可以参考下
    2016-04-04

最新评论