python - 为什么可以在函数定义中用a['xxx'] = 'ooo'的方式创建字典?
高洛峰
高洛峰 2017-04-17 17:50:53
0
1
348

在看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外任意参数吗

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답(1)
刘奇

__new()__attrs 매개변수는 원래 사전이므로 생성이 없습니다. 단지 원래 사전에 몇 가지 새로운 요소를 추가했을 뿐입니다.

메타클래스는 클래스 객체를 생성하는 반면 일반 클래스는 인스턴스 객체를 생성한다는 점에서 일반 클래스와 다릅니다. 메타클래스에서 name, bases, attrs는 각각 类名, 基类, 类属性을 나타냅니다. 실제 수업 구조는 딱 이 세가지 입니다

으아악

여기의 __init__self._name은 모두 attrs에 속합니다. 따라서 매개변수를 전달할 수 없습니다.

제 생각에는 메타클래스의 역할은 필터링에 더 가깝고 규칙을 공식화할 수 있습니다. 클래스가 실제로 사용되면 먼저 메타클래스가 정의되어 있는지 확인합니다. 그렇지 않으면 네이티브 메타클래스, 즉 type이 호출됩니다.

공식문서를 확인하실 수 있습니다

위 내용은 편차가 있을 수 있으므로 수정을 환영합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿