- 用metaclass来指定类C的元类是MyType
class MyType: def __init__(cls, *args, **kwargs): print('here!') #由于metaclass=MyType,所以执行到这一步的时候,会调用MyType的构造函数 class C(metaclass=MyType): def __init__(self): pass
- 对象后面跟(),是要执行类中的call方法。
- 类C是一个对象,是元类MyType创建了它。遇到C()是要调用MyType的call
- obj是一个对象,是类C创建了它。遇到obj()是要调用C的call
以下代码调用方法的顺序,按照数字顺序先后执行 class MyType(type): def __init__(cls, *args, **kwargs): super(MyType, cls).__init__(*args, **kwargs) def __call__(cls, *args, **kwargs): #3.调用C类的__new__方法 obj = cls.__new__(cls, *args, **kwargs) #4.调用C类的__init__方法 cls.__init__(cls) #1.执行到class C(metaclass=MyType)的时候,调用MyType的__init__方法 class C(metaclass=MyType): def __init__(self): pass def __new__(cls, *args, **kwargs): return object.__new__(cls, *args, **kwargs) #2.执行到C()的时候,调用MyType的__call__方法 obj = C()