python中的魔法方法

对象生命周期

方法 说明
new(cls, ...) 创建实例(先于 init
init(self, ...) 初始化实例
del(self) 对象销毁
call(self, ...) 让实例可调用

属性访问控制

方法 说明
getattr(self, name) 属性不存在时
getattribute(self, name) 所有属性访问
setattr(self, name, value) 设置属性
delattr(self, name) 删除属性

容器 / 集合行为

方法 说明
len(self) len(obj)
getitem(self, key) obji
setitem(self, key, val) obji = v
delitem(self, key) del obji
iter(self) for x in obj
contains(self, item) x in obj

数值运算(算数 & 位运算)

方法 说明
add(self, other) +
sub(self, other) -
mul(self, other) *
\truediv_(self, other) /
pow(self, other) **
neg(self) -obj

比较与排序

方法 说明
eq(self, other) ==
ne(self, other) !=
lt(self, other) <
le(self, other) <=
gt(self, other) >
ge(self, other) >=

字符串与格式化

方法 说明
str(self) str(obj)
repr(self) repr(obj)
format(self, fmt) format(obj)
\bytes(self) bytes(obj)

上下文管理器

方法 说明
enter(self) with obj:
exit(self, *exc) 退出上下文

序列化 / Pickle

方法 说明
reduce(self) pickle 重建
reduce_ex(self) pickle 协议扩展
getstate(self) 控制序列化
setstate(self, state) 控制反序列化

元类 & 类创建

方法 说明
prepare(mcs, name, bases) 准备命名空间
instancecheck(cls, obj) isinstance
subclasscheck(cls, sub) issubclass

描述符协议

方法 说明
get(self, obj, cls) 读属性
set(self, obj, value) 写属性
delete(self, obj) 删属性

常用但容易忽略

方法 说明
hash(self) hash(obj)
bool(self) bool(obj)
copy(self) copy.copy
deepcopy(self, memo) copy.deepcopy
相关推荐
努力的lpp5 分钟前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
菜鸟~noob23313 分钟前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
泡海椒1 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb1 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
sanjiaomao3332 小时前
从论文公式到Python实现:用单元测试校验滑动平均算法
python·算法·单元测试
Keven_112 小时前
算法札记:ACM适用的很骚的C++语法(持续更新)
开发语言·c++
脉动数据行情13 小时前
C# 实现德指 DAX 期货 WebSocket 实时行情监听
开发语言·websocket·c#
大圣编蚕3 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
菜鸟~noob2333 小时前
【电子战】第02篇:能量检测器 vs. 相关检测器【含matlab代码】
开发语言·matlab
linweidong4 小时前
中科闻歌Java面试题及参考答案
java·python·大模型·提示词·ai agent·mcp·rag原理