metaclass
- 用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()
浙公网安备 33010602011771号