在看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
外任意参数吗
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,
ininame
,bases
danattrs
masing-masing mewakili类名
,基类
dan类属性
. Struktur kelas sebenar hanyalah tiga__init__
danself._name
di sini kedua-duanya milikattrs
. 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.