在看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
外任意参数吗
__new()__
のattrs
パラメータは元々辞書なので生成はありません。元の辞書にいくつかの新しい要素を追加するだけです。メタクラスはクラス オブジェクトを生成するのに対し、通常のクラスはインスタンス オブジェクトを生成するという点で通常のクラスとは異なります。メタクラスでは、
リーリーname
、bases
、attrs
はそれぞれ类名
、基类
、类属性
を表します。実際のクラス構成はこの 3 つだけですここでの
__init__
とself._name
はどちらもattrs
に属します。したがって、パラメータを渡すことはできません。私の意見では、メタクラスの役割はフィルタリングの方にあり、ルールを定式化できます。実際にクラスを使用するときは、まずメタクラスが定義されているかどうかを確認します。定義されていない場合は、ネイティブ メタクラス、つまり
type
が呼び出されます。公式ドキュメントをチェックアウトできます
上記は私の理解であり、相違がある可能性がありますので、修正を歓迎します。