当前位置: 首页 > article >正文

Python魔法函数

在Python中,的确有“魔法函数”(Magic Methods)这种说法,也被称为特殊方法(Special Methods)。这些函数的名称以双下划线开始和结束,例如 __init____len__ 等。它们为Python提供了一种约定俗成的方式,使得用户定义的类能够与Python的内置操作和语法进行交互。以下是魔法函数的常见用途:

1. 对象初始化与构造

  • __init__:构造函数,在创建对象时被调用,用于初始化对象的属性。
class MyClass:
    def __init__(self, value):
        self.value = value

2. 模拟容器类型

  • __len__:定义当使用内置函数 len() 时对象的行为,返回对象的长度。
class MyList:
    def __init__(self):
        self.data = []
    def __len__(self):
        return len(self.data)
  • __getitem__:使得对象可以像序列或映射一样通过索引或键来访问元素。
class MyDict:
    def __init__(self):
        self.data = {}
    def __getitem__(self, key):
        return self.data[key]

3. 运算符重载

  • __add__:定义对象使用 + 运算符时的行为。
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)
  • __eq__:定义对象使用 == 运算符时如何判断相等。
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __eq__(self, other):
        return self.x == other.x and self.y == other.y

4. 迭代器相关

  • __iter__:返回一个迭代器对象,使得对象可以在 for 循环中使用。
class MyRange:
    def __init__(self, start, end):
        self.current = start
        self.end = end
    def __iter__(self):
        return self
    def __next__(self):
        if self.current >= self.end:
            raise StopIteration
        value = self.current
        self.current += 1
        return value

5. 字符串表示

  • __str__:定义当使用 str() 函数或在 print() 中输出对象时的字符串表示形式。
class Person:
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return f"Person named {self.name}"
  • __repr__:定义对象的“官方”字符串表示形式,通常用于调试和开发。
class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author
    def __repr__(self):
        return f"Book('{self.title}', '{self.author}')"

魔法函数极大地增强了Python类的灵活性和表现力,使得自定义类能够像内置类型一样自然地融入Python的编程环境中。


另外可以参考:Python 魔术方法


http://www.kler.cn/a/529797.html

相关文章:

  • Rust 变量特性:不可变、和常量的区别、 Shadowing
  • 科技快讯 | OpenAI首次向免费用户开放推理模型;特朗普与黄仁勋会面;雷军回应“10后小学生深情表白小米SU7”
  • (leetcode 213 打家劫舍ii)
  • 90,【6】攻防世界 WEB Web_php_unserialize
  • 【实战篇章】深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据
  • QT实现有限元软件操作界面
  • MySQL入门 – 设置环境变量和使用系统数据库
  • [SAP ABAP] 在ABAP Debugger调试器中设置断点
  • 本地部署DeepSeek方法
  • UE 5.3 C++ 对垃圾回收的初步认识
  • 纯后训练做出benchmark超过DeepseekV3的模型?
  • 1.[安洵杯 2019]easy_web1
  • 标准IO与文件IO 进程与线程
  • 如何实现一个CLI命令行功能 | python 小知识
  • 低代码系统-产品架构案例介绍、炎黄盈动-易鲸云(十二)
  • PHP 常用函数2025.02
  • 《苍穹外卖》项目学习记录-Day10Spring Task
  • [ESP32:Vscode+PlatformIO]新建工程 常用配置与设置
  • 2025 年 YOLO 十大未来应用场景
  • LeetCode:121.买卖股票的最佳时机1
  • MoonBit 编译器(留档学习)
  • SAP HCM insufficient authorization, no.skipped personnel 总结归纳
  • 【含文档+PPT+源码】基于微信小程序的社区便民防诈宣传系统设计与实现
  • React中使用箭头函数定义事件处理程序
  • 小红的小球染色期望
  • 武汉科技大学计算机课程设置,武汉科技大学计算机控制与接口技术课程实施方案