python类的实例化过
创建对象 __new__
构造函数,初始化对象 __init__
返回对象引用
案例说明
class A(): def __new__(cls, *args, **kwargs): print("A 的new方法被执行") def __init__(self): print("A 的init方法被执行") class B(A): def __new__(cls, *args, **kwargs): print("B 的new方法被执行") def __init__(self): print("B 的init方法被执行") a=A() b=B() | A 的new方法被执行 B 的new方法被执行 |
可以看到A和B两个类的构造函数__init__并没有被执行,是重写的实例化函数__new__,没有使用return语句返回对象 |
class A(): def __new__(cls, *args, **kwargs): print("A 的new方法被执行") return object().__new__(cls) def __init__(self): print("A 的init方法被执行") class B(A): def __new__(cls, *args, **kwargs): print("B 的new方法被执行") return object().__new__(cls) def __init__(self): print("B 的init方法被执行") a=A() b=B() | A 的new方法被执行 A 的init方法被执行 B 的new方法被执行 B 的init方法被执行 |