cari

Rumah  >  Soal Jawab  >  teks badan

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 hari yang lalu349

membalas semua(1)saya akan balas

  • 怪我咯

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

    Parameter

    __new()__attrs pada asalnya ialah kamus, jadi tiada generasi. Ia hanya menambah beberapa elemen baharu pada kamus asal.

    Metaclass berbeza daripada kelas biasa kerana ia menghasilkan objek kelas, manakala kelas biasa menghasilkan objek contoh. Dalam kelas meta, name, bases dan attrs masing-masing mewakili 类名, 基类 dan 类属性. Struktur kelas sebenar hanyalah tiga

    ini
    class B(A):
        def __init__(self, name):
            self._name = name

    __init__ dan self._name di sini kedua-duanya milik attrs. Jadi anda tidak boleh melepasi sebarang parameter.

    Pada pendapat saya, peranan metaclass lebih kepada penapisan, ia boleh merumuskan peraturan. Apabila kelas benar-benar digunakan, ia mula-mula akan menyemak sama ada metaclass ditakrifkan Jika tidak, metaclass asli, iaitu type, akan dipanggil.

    Anda boleh menyemak dokumentasi rasmi

    Perkara di atas adalah kefahaman saya mungkin ada pembetulan dialu-alukan dan amat dihargai.

    balas
    0
  • Batalbalas