- 用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):passdef __new__(cls, *args, **kwargs):return object.__new__(cls, *args, **kwargs)#2.执行到C()的时候,调用MyType的__call__方法
obj = C()