Python教程34:魔术方法(Magic Methods)

Python教程34:魔术方法(Magic Methods) “命名即魔法。” Python的魔术方法(也叫特殊方法、双下划线方法)是Python面向对象的核心特性。它们让你的类能够像内置类型一样工作,实现运算符重载、容器协议等高级功能。 1. 什么是魔术方法 魔术方法(Magic Methods): 双下划线开头和结尾的方法:__method__ Python自动调用,不需要显式调用 让类支持Python的特殊语法 也叫"dunder methods"(double underscore) 为什么需要魔术方法: 运算符重载:让对象支持+、-、*等运算 容器协议:让对象可迭代、可索引 上下文管理:支持with语句 对象表示:自定义打印输出 属性访问:控制属性读写 简单示例 1class Point: 2 """二维点""" 3 def __init__(self, x, y): 4 """初始化(魔术方法)""" 5 self.x = x 6 self.y = y 7 8 def __str__(self): 9 """字符串表示(魔术方法)""" 10 return f"Point({self.x}, {self.y})" 11 12 def __add__(self, other): 13 """加法运算符(魔术方法)""" 14 return Point(self.x + other.x, self.y + other.y) 15 16# 使用 17p1 = Point(1, 2) 18p2 = Point(3, 4) 19 20print(p1) # 调用__str__: Point(1, 2) 21p3 = p1 + p2 # 调用__add__ 22print(p3) # Point(4, 6) 2. 对象创建和销毁 new:创建实例 1class Singleton: 2 """ 3 单例模式 4 - __new__在__init__之前调用 5 - __new__负责创建实例 6 - __new__是类方法 7 """ 8 _instance = None 9 10 def __new__(cls): 11 """ 12 创建实例 13 - cls是类本身 14 - 必须返回实例 15 """ 16 if cls._instance is None: 17 print("Creating singleton instance") 18 cls._instance = super().__new__(cls) 19 return cls._instance 20 21 def __init__(self): 22 """初始化实例""" 23 print("Initializing instance") 24 25# 使用 26s1 = Singleton() # Creating singleton instance, Initializing instance 27s2 = Singleton() # Initializing instance (不创建新实例) 28print(s1 is s2) # True(同一个实例) init:初始化 我们已经很熟悉了: ...

2025-07-28 · 8 min · 1524 words · 老墨