반응형
__dict__ 클래스가 매핑 프록시 인 이유는 무엇입니까?
클래스 __dict__
가 인 이유가 궁금 mappingproxy
하지만 인스턴스 __dict__
는 평범한dict
>>> class A:
... pass
>>> a = A()
>>> type(a.__dict__)
<class 'dict'>
>>> type(A.__dict__)
<class 'mappingproxy'>
이렇게하면 인터프리터가 클래스 수준 속성 및 메서드의 키가 문자열 만 될 수 있음을 확인할 수 있습니다.
다른 곳에서, 파이썬은 "합의적인 성인 언어"입니다. 즉, 객체에 대한 딕셔너리는 사용자가 노출하고 변경할 수 있습니다. 그러나 클래스에 대한 클래스 수준 속성 및 메서드의 경우 키가 문자열임을 보장 할 수 있다면 클래스 수준에서 속성 및 메서드 조회를위한 일반적인 케이스 코드를 단순화하고 속도를 높일 수 있습니다. 특히, 새로운 스타일의 클래스에 대한 __mro__ 검색 논리는 클래스 dict 키가 문자열이라고 가정하여 단순화되고 속도가 빨라집니다.
mappingproxy는 단순히 __setattr__
메서드 가없는 dict입니다 .
이 코드를 확인하고 참조 할 수 있습니다.
from types import MappingProxyType
d={'key': "value"}
m = MappingProxyType(d)
print(type(m)) # <class 'mappingproxy'>
m['key']='new' #TypeError: 'mappingproxy' object does not support item assignment
mappingproxy는 Python 3.3부터입니다. 다음 코드는 dict 유형을 보여줍니다.
class C:pass
ci=C()
print(type(C.__dict__)) #<class 'mappingproxy'>
print(type(ci.__dict__)) #<class 'dict'>
참고 URL : https://stackoverflow.com/questions/32720492/why-is-a-class-dict-a-mappingproxy
반응형
'Programing' 카테고리의 다른 글
다중 통화 모범 사례 및 구현 (0) | 2020.12.13 |
---|---|
Python (.T)의 구문 (0) | 2020.12.13 |
서비스를 클래스에 주입하는 방법 (구성 요소가 아님) (0) | 2020.12.13 |
npm 패키지 목록에서 무엇을 중복 제거합니까? (0) | 2020.12.13 |
IDictionary (0) | 2020.12.13 |