検索

ホームページ  >  に質問  >  本文

python - 为什么可以在函数定义中用a['xxx'] = 'ooo'的方式创建字典?

在看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外任意参数吗

高洛峰高洛峰2887日前352

全員に返信(1)返信します

  • 怪我咯

    怪我咯2017-04-17 17:52:53

    __new()__attrsパラメータは元々辞書なので生成はありません。元の辞書にいくつかの新しい要素を追加するだけです。

    メタクラスはクラス オブジェクトを生成するのに対し、通常のクラスはインスタンス オブジェクトを生成するという点で通常のクラスとは異なります。メタクラスでは、namebasesattrs はそれぞれ 类名基类类属性 を表します。実際のクラス構成はこの 3 つだけです

    リーリー

    ここでの __init__self._name はどちらも attrs に属します。したがって、パラメータを渡すことはできません。

    私の意見では、メタクラスの役割はフィルタリングの方にあり、ルールを定式化できます。実際にクラスを使用するときは、まずメタクラスが定義されているかどうかを確認します。定義されていない場合は、ネイティブ メタクラス、つまり type が呼び出されます。

    公式ドキュメントをチェックアウトできます

    上記は私の理解であり、相違がある可能性がありますので、修正を歓迎します。

    返事
    0
  • キャンセル返事