在看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
外任意参数吗
怪我咯2017-04-17 17:52:53
__new()__
的attrs
參數本來就是一個字典,所以沒有產生一說。只是在原有的字典基礎上加入一些新的元素而已。 __new()__
的attrs
参数本来就是一个字典,所以没有生成一说。只是在原有的字典基础上添加一些新的元素而已。
元类不同于一般的类,它所产生的是类对象,而普通的类产生的是实例对象。元类中name
,bases
,attrs
分别代表类名
,基类
,类属性
。实际类的结构也就这三样
class B(A):
def __init__(self, name):
self._name = name
这里的__init__
和self._name
都属于attrs
。所以不能传任意参数。
在我看来,元类的作用更倾向于过滤,它可以制定规则。在实际使用类的时候,会先检查是否定义了元类,如果没有则会调用原生的元类即type
name
,bases
,attrs
分別代表類別名稱
,基底類別
,類別屬性
。實際類別的結構也就這三樣rrreee
這裡的__init__
和self._name
都屬於attrs
。所以不能傳任意參數。 在我看來,元類別的作用更傾向於過濾,它可以製定規則。在實際使用類別的時候,會先檢查是否定義了元類,如果沒有則會呼叫原生的元類即
type
。 🎜
🎜你可以看看官方文件🎜
🎜以上是我的一點理解,也許有偏差,歡迎指正不勝感激。 🎜