在看python教程的时候发现这个元类定义
class ListMetaclass(type):
def __new__(cls, name, bases, attrs):
attrs['add'] = lambda self, value: self.append(value)
return type.__new__(cls, name, bases, attrs)
__new__
方法里面的这句attrs['add'] = lambda self, value: self.append(value)
为什么直接生成了一个字典?
对于一个元类,它的__new__
方法一定是传这四个参数,而不像类的__new__
方法可以传cls
外任意参数吗
Le paramètre
de
__new()__
attrs
est à l'origine un dictionnaire, il n'y a donc pas de génération. Cela ajoute simplement de nouveaux éléments au dictionnaire original.Les métaclasses sont différentes des classes ordinaires dans le sens où elles produisent des objets de classe, tandis que les classes ordinaires produisent des objets d'instance. Dans la métaclasse,
name
,bases
etattrs
représentent respectivement类名
,基类
et类属性
. La structure de classe réelle n'est composée que de ces troisLe
__init__
et leself._name
ici appartiennent tous deux àattrs
. Vous ne pouvez donc transmettre aucun paramètre.À mon avis, le rôle de la métaclasse est plutôt orienté vers le filtrage, elle peut formuler des règles. Lorsque la classe est réellement utilisée, elle vérifiera d'abord si la métaclasse est définie. Sinon, la métaclasse native, c'est-à-dire
type
, sera appelée.Vous pouvez consulter la documentation officielle
Ce qui précède est ma compréhension. Il peut y avoir des écarts. Les corrections sont les bienvenues et grandement appréciées.