在看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
매개변수는 원래 사전이므로 생성이 없습니다. 단지 원래 사전에 몇 가지 새로운 요소를 추가했을 뿐입니다.
메타클래스는 클래스 객체를 생성하는 반면 일반 클래스는 인스턴스 객체를 생성한다는 점에서 일반 클래스와 다릅니다. 메타클래스에서 name
, bases
, attrs
는 각각 类名
, 基类
, 类属性
을 나타냅니다. 실제 수업 구조는 딱 이 세가지 입니다
여기의 __init__
과 self._name
은 모두 attrs
에 속합니다. 따라서 매개변수를 전달할 수 없습니다.
제 생각에는 메타클래스의 역할은 필터링에 더 가깝고 규칙을 공식화할 수 있습니다. 클래스가 실제로 사용되면 먼저 메타클래스가 정의되어 있는지 확인합니다. 그렇지 않으면 네이티브 메타클래스, 즉 type
이 호출됩니다.
공식문서를 확인하실 수 있습니다
위 내용은 편차가 있을 수 있으므로 수정을 환영합니다.