云计算百科
云计算领域专业知识百科平台

Python之魔术方法

“魔术方法”(Magic Methods),又叫 特殊方法 或 双下方法(dunder methods),是 Python 中以双下划线 __xxx__ 命名的函数。这些方法不是你直接调用的,而是由 Python 在特定操作时自动触发的。

例如:

  • __init__ 会在对象创建时被调用;
  • __str__ 会在使用 print(obj) 时调用;
  • __add__ 会在使用 + 运算符时调用。

🧠 魔术方法的命名规则

所有魔术方法都遵循这样的命名格式:

__方法名__ (注意前后都有两个下划线)

你自己不要创建随意命名的双下方法,除非是在实现 Python 的约定接口。


🧩 魔术方法分类总览

✅ 1. 对象生命周期相关

方法名用途
__init__(self, …) 初始化对象(构造函数)
__new__(cls, …) 创建对象(罕见)
__del__(self) 析构方法(对象被销毁时)

✅ 2. 字符串表示与打印

方法名说明
__str__ str(obj) 或 print(obj) 时调用
__repr__ repr(obj)、控制台直接输入对象时调用
__format__ "{:>10}".format(obj) 时调用

✅ 3. 算术运算符重载

方法名运算符示例表达式
__add__ + a + b
__sub__ a – b
__mul__ * a * b
__truediv__ / a / b
__floordiv__ // a // b
__mod__ % a % b
__pow__ ** a ** b

✅ 4. 比较运算符重载

方法名运算符示例
__eq__ == a == b
__ne__ != a != b
__lt__ < a < b
__le__ <= a <= b
__gt__ > a > b
__ge__ >= a >= b

✅ 5. 容器/索引行为

方法名示例用法
__len__ len(obj)
__getitem__ obj[key]
__setitem__ obj[key] = value
__delitem__ del obj[key]
__iter__ for x in obj
__next__ next(iterator)
__contains__ x in obj

✅ 6. 上下文管理器(with)

方法名用途
__enter__ 进入 with 语句块
__exit__ 离开 with 语句块

✅ 7. 可调用对象

方法名用法
__call__ obj() 时调用

✅ 8. 类行为相关

方法名用法
__getattr__ 访问不存在属性时触发
__getattribute__ 所有属性访问时触发(谨慎用)
__setattr__ 设置属性时触发
__delattr__ 删除属性时触发
__dir__ dir(obj) 时调用
__instancecheck__ isinstance(obj, cls)
__subclasscheck__ issubclass(sub, cls)

🎯 示例:自定义类重载 + 运算符

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)

def __str__(self):
return f"({self.x}, {self.y})"

p1 = Point(1, 2)
p2 = Point(3, 4)
print(p1 + p2) # 调用 __add__,输出: (4, 6)


✅ 总结

类型常用魔术方法
构造/销毁 __init__, __del__
表示 __str__, __repr__
运算符重载 __add__, __eq__, 等等
容器行为 __getitem__, __len__, 等等
上下文管理器 __enter__, __exit__
函数模拟 __call__

赞(0)
未经允许不得转载:网硕互联帮助中心 » Python之魔术方法
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!