在看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外任意参数吗
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
__new()__的attrs参数本来就是一个字典,所以没有生成一说。只是在原有的字典基础上添加一些新的元素而已。元类不同于一般的类,它所产生的是类对象,而普通的类产生的是实例对象。元类中
name,bases,attrs分别代表类名,基类,类属性。实际类的结构也就这三样这里的
__init__和self._name都属于attrs。所以不能传任意参数。在我看来,元类的作用更倾向于过滤,它可以制定规则。在实际使用类的时候,会先检查是否定义了元类,如果没有则会调用原生的元类即
type。你可以看看官方文档
以上是我的一点理解,也许有偏差,欢迎指正不胜感激。