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