四、魔法方法学习笔记

四、魔法方法学习笔记

2026-02-21
Python基础
type
Post
status
Published
date
Feb 21, 2026
slug
python-magic-method-learning-notes-4
summary
__init__ 很神奇,不用调用就能执行。后来才知道,这种双下划线开头结尾的方法叫"魔法方法",它们让对象可以像内置类型一样使用,比如用 + 号相加、用 print 直接输出!
tags
category
Python基础
icon
password
💡 学习感悟__init__ 很神奇,不用调用就能执行。后来才知道,这种双下划线开头结尾的方法叫"魔法方法",它们让对象可以像内置类型一样使用,比如用 + 号相加、用 print 直接输出!

1. 什么是魔法方法?

魔法方法(Magic Methods)是双下划线开头结尾的特殊方法,在特定情况下自动调用。
📝 我的理解:魔法方法就像是自动触发器——满足条件时自动执行,不需要手动调用。

2. 构造与析构

2.1 init 构造方法

📝 我的理解__init__ 就像是新房装修——房子建好了,自动进行装修(初始化)。

2.2 del 析构方法

📝 我的理解__del__ 就像是退房清理——离开房间时自动打扫、关闭水电。

3. 字符串表示

3.1 str 用户友好字符串

📝 我的理解__str__ 就像是名片——给别人看的,要简洁明了。

3.2 repr 开发者字符串

📝 我的理解__repr__ 就像是身份证——给开发者看的,要详细准确,最好能直接用来重建对象。

3.3 str vs repr

方法
用途
调用方式
目标用户
__str__
用户友好
print(obj), str(obj)
最终用户
__repr__
开发者友好
repr(obj), 交互式解释器
开发者
💡 建议:至少实现 __repr__,如果 __str__ 没定义,会回退到 __repr__

4. 比较方法

4.1 比较运算符

📝 我的理解:比较方法就像是评判标准——定义什么情况下两个对象相等,什么情况下一个大一个小。

4.2 比较方法速查

方法
运算符
含义
__eq__
==
等于
__ne__
!=
不等于
__lt__
<
小于
__le__
<=
小于等于
__gt__
>
大于
__ge__
>=
大于等于

5. 算术运算符

5.1 加减乘除

📝 我的理解:算术方法就像是运算符重载——让自定义对象也能用 + - * / 等运算符。

5.2 算术运算符速查

方法
运算符
含义
__add__
+
加法
__sub__
-
减法
__mul__
*
乘法
__truediv__
/
除法
__floordiv__
//
整除
__mod__
%
取模
__pow__
**
幂运算

6. 容器类型方法

6.1 让对象像列表一样使用

📝 我的理解:容器方法就像是模仿秀——让自定义对象也能像列表、字典一样用 []in

7. 可调用对象

7.1 call 方法

📝 我的理解__call__ 就像是变形金刚——对象可以变成函数的样子,直接加括号调用。

8. 踩坑记录

8.1 只定义 eq 不定义 hash

⚠️ 踩坑:定义了 __eq__ 后,对象默认不可哈希,不能放入 set 或作为 dict 的 key!

8.2 修改可变对象返回自身

⚠️ 踩坑:算术运算应该返回新对象,而不是修改自身(除非你想实现 +=__iadd__)!

9. 核心知识点整理

9.1 常用魔法方法速查

类别
方法
触发条件
构造析构
__init__
创建对象
__del__
删除对象
字符串
__str__
print(), str()
__repr__
repr(), 交互式解释器
比较
__eq__, __ne__
==, !=
__lt__, __le__
<, <=
__gt__, __ge__
>, >=
算术
__add__, __sub__
+, -
__mul__, __truediv__
*, /
容器
__len__
len()
__getitem__
obj[key]
__setitem__
obj[key] = value
__contains__
in
可调用
__call__
obj()

9.2 魔法方法命名规则

  • 双下划线开头:__xxx
  • 双下划线结尾:xxx__
  • 不要自己发明魔法方法,只用 Python 定义的
推荐云服务

雨云 - 云服务器首选

稳定 · 高速 · 性价比超高

使用优惠码立享折扣,开启你的云端之旅~

一元试用秒级开通24h在线客服

优惠码

zqf
立即访问
Loading...
灵心小窝

灵心小窝

这里不是一个喧闹的地方,只是用来存放一些还不想遗忘的东西。

声明 © 2026 早清风
加载中...