【python 笔记】元类中的__call__方法
在学到用metaclass实现单例时,发现用的是元类的__call__方法,而不是__new__方法。对元类__call__比较疑惑,看起来似乎和普通类的__call__不一样。学习之后,一些基础的总结如下。
先是一些基本的概念等
- 元类是类的类,元类之于类就相当于类之于实例。
- 元类的new方法会创建一个类并返回,就像类的new方法会创建一个实例并返回一样。
- 元类中其他方法的定义类似于类中方法的定义。
__call__
方法是元类中有一个特殊的方法。
在元类方法中,参数cls对应的对象:
class Meta(type):
def __new__(cls, name, bases, dct): # cls为元类Meta
return type.__new__(cls, name, bases, dct)
def __init__(cls, *args, **kwargs): # cls为元类创建的类
pass
def __call__(cls, *args, **kwargs): # cls为元类创建的类
pass
对元类__new__、__call__的分析
Code1:元类 改写__new__方法
class SingletonType(type):
def __new__(cls, class_name, class_parents, class_attr): # cls为元类
print('元类__new__')
return type(class_name, class_parents, class_attr)
def __init__(cls, *args, **kwargs): #cls为元类创建的类
print('元类__init__&