Maison > Questions et réponses > le corps du texte
在看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
外任意参数吗
怪我咯2017-04-17 17:52:53
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
et attrs
représentent respectivement 类名
, 基类
et 类属性
. La structure de classe réelle n'est composée que de ces trois
class B(A):
def __init__(self, name):
self._name = name
Le __init__
et le self._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.