魔术方法是 Python 提供的让用户客制化一个类的方式,是定义在类里的一些特殊方法。
魔术方法的名字前后都有两个下划线,所以也叫做 Dunder Method。比如最常见的 __init__
- __new__: 从 Class 创建 Object 的时候调用,有返回值,返回值就是一个 Object。单例模式、metaclass 会用到 __new__
- __init__: 初始化一个 Object 的时候调用,没有返回值
object_a = ClassA(args) 等价于
object_a = __new__(A, args)
__init__(object_a, args) - __del__:简单的可以类比 Java 里的析构函数,但是由于 Python 内存自动回收的逻辑,__del__ 有时候不一定会在期望的时机执行
- __str__:人类更易懂的字符串表示,print 优先使用 __str__,如果 __str__ 没有被定义,会使用 __repr__
- __repr__:一般返回更详细的信息,用于调试
- __format__:用于格式化输出,用的比较少
- __bytes__:用于客制化 Object 的 byte 表示,一般用的比较少
文章评论