元类是类的类,元类之于类就相当于类之于实例。
元类的new方法会创建一个类并返回,就像类的new方法会创建一个实例并返回一样。
元类中其他方法的定义类似于类中方法的定义,例如:
class Meta(type):
def __new__(cls, name, bases, dct): # cls为元类Meta
return type.__new__(cls, name, bases, dct)
def foo(cls, *args, **kwargs): # cls为元类创建的类
pass
def __call__(cls, *args, **kwargs): # cls为元类创建的类
pass
元类中有一个特殊的方法__call__
,这个方法会阶段类的__new__
和__init__