deepwzh的技术笔记
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • Python
  • 魔术方法
  • pep 草案
  • 内存管理
  • 学习资料

    • 学习资料
    • 进阶学习资料
  • Asyncio

    • Asyncio
    • 调度
  • 库

    • 库
    • 模板渲染相关
    • protobuf 相关
    • mysql 相关
  • cpython开发

    • cpython 开发
    • 开发环境搭建
    • CAPI
    • 提交流程
    • Pyrepl
  • 包与虚拟环境管理器

    • 包与虚拟环境管理器
    • Pip
    • Conda
    • Poetry
    • Pyenv
  • 科学计算相关

    • 科学计算相关
    • Pandas

魔术方法

一、构造与初始化

  1. init(self, ...)
  2. 在对象实例化时自动调用,用于初始化实例属性(如设置默认值或接收参数)。
  3. 示例:
class MyClass:
    def 
__init__
(self, name):
        self.name = name# 初始化属性
  1. new(cls, ...)
  2. 在对象创建前调用,负责实例的生成并返回实例对象(常用于单例模式或不可变类型定制)。

二、对象表示与格式化

  1. str(self)
  2. 定义对象的用户友好字符串表示(通过 print() 或 str() 调用)。
  3. 示例:
class Book:
    def 
__str__
(self):
        return f"{self.title} by {self.author}"
  1. repr(self)
  2. 提供明确的开发调试信息(在交互式环境或 repr() 调用时生效)。

三、属性管理

  1. **getattr(self, name)**当访问不存在的属性时触发(用于动态属性生成或错误处理)。
  2. **setattr(self, name, value)**拦截属性赋值操作(可添加校验逻辑或触发副作用)。
  3. **delattr(self, name)**在删除属性时调用(如资源释放)。

四、容器操作

  1. **len(self)**返回容器长度(支持 len() 函数调用)。
  2. **getitem(self, key)**实现索引或键访问(如 obj[key])。
  3. **setitem(self, key, value)**通过索引或键设置元素(如 obj[key] = value)。

五、运算符重载

  1. 算术运算

    • __add__(self, other):实现加法(+)‌
    • __sub__(self, other):实现减法()‌
    • __mul__(self, other):实现乘法()‌
  2. 比较运算

    • __eq__(self, other):等于判断(==)‌
    • __lt__(self, other):小于判断(<)‌

六、特殊行为扩展

  1. call(self, ...)
  2. 使实例可像函数一样调用(如 obj())。
  3. 示例:
class Adder:
    def 
__call__
(self, a, b):
        return a + b
add = Adder()
print(add(3, 5))# 输出
  1. 上下文管理

    • __enter__(self):进入 with 代码块时调用
    • __exit__(self, ...):退出 with 代码块时调用(处理异常或资源释放)‌
  2. 迭代控制

    • __iter__(self):返回迭代器对象
    • __next__(self):控制迭代过程(支持 for 循环)‌

七、其他实用方法

  1. **slots**限制实例可添加的属性(节省内存)。
  2. **del(self)**对象销毁前调用(处理资源清理)。
  3. **dir(self)**返回对象的公开属性和方法列表(增强 IDE 支持)。

应用场景示例

  • 自定义数据结构‌:通过容器类方法(getitem、len)模拟列表或字典行为。
  • 运算符扩展‌:实现向量类的加减运算(add、sub)。
  • 装饰器逻辑‌:结合 call 方法创建状态保持的装饰器
Prev
Python
Next
pep 草案