什么是魔术方法
所谓魔法方法,其官方名称为 special method,是 Python 的一种高级语法特性。它允许你在类中自定义函数,并将其绑定到类的特殊行为中。例如在类 A 中定义 __str__() 函数,调用 str(A()) 时会自动触发该方法。
虽然 Magic Methods 这个名字在官方文档中不常见,但已被广泛使用。这些方法通常以双下划线开头和结尾,因此也被称为 dunder methods(double underscore)。
对象创建与初始化
__new__ 和 __init__
这两个方法控制对象的创建过程:
__new__:负责创建实例对象,是静态方法,返回实例。__init__:负责初始化实例,接收已创建的实例作为第一个参数。
class A:
def __new__(cls, *args, **kwargs):
print("__new__")
return super().__new__(cls, *args, **kwargs)
def __init__(self):
print("__init__")
if __name__ == '__main__':
a = A()
输出顺序为 __new__ 后接 __init__。逻辑上可理解为:
obj = __new__(A)
__init__(obj)
何时使用 __new__?
主要用于单例模式、元类控制或不可变类型定制。以下是一个简单的单例实现:
class Singleton:
_instance = None
def __new__(cls):
if not cls._instance:
cls._instance = super().__new__(cls)
return cls._instance
s1 = Singleton()
s2 = Singleton()
print(s1 is s2)


