클래스 __dict_가 매핑 프록시인 이유는 무엇입니까?
왜 수업을 하는지 궁금합니다.__dict__
이다.mappingproxy
단 하나의 예__dict__
그냥 평범함dict
>>> class A:
... pass
>>> a = A()
>>> type(a.__dict__)
<class 'dict'>
>>> type(A.__dict__)
<class 'mappingproxy'>
이렇게 하면 인터프리터가 클래스 수준 속성 및 메서드의 키를 문자열로만 지정할 수 있습니다.
다른 곳에서 Python은 "동의하는 성인 언어"이며, 이는 객체에 대한 딕트가 사용자에 의해 노출되고 변형된다는 것을 의미합니다.그러나 클래스에 대한 클래스 수준 속성 및 메서드의 경우 키가 문자열임을 보장할 수 있다면 클래스 수준에서 속성 및 메서드 조회를 위한 공통 사례 코드를 단순화하고 속도를 높일 수 있습니다.특히, 새로운 스타일 클래스에 대한 __mro__ 검색 로직은 클래스 딕트 키가 문자열이라고 가정하여 단순화되고 속도가 빨라집니다.
매핑 프록시는 단순히 딕트에 해당하지 않습니다.__setattr__
방법.
체크아웃 후 이 코드를 참고하시면 됩니다.
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
매핑 프록시는 Python 3.3 이후입니다.다음 코드는 딕트 유형을 보여줍니다.
class C:pass
ci=C()
print(type(C.__dict__)) #<class 'mappingproxy'>
print(type(ci.__dict__)) #<class 'dict'>
Python 3.3 이후mappingproxy
유형의 이름이 변경되었습니다.dictproxy
이 주제에 대한 흥미로운 토론이 있었습니다.
이 유형에 대한 설명서를 찾는 것은 약간 어렵지만, vars 방법에 대한 설명서는 이를 완벽하게 설명합니다(잠시 동안 문서화되지는 않았지만).
모듈 및 인스턴스와 같은 개체에 업데이트 가능한 항목이 있음
__dict__
속성; 그러나 다른 개체는 쓰기 제한이 있을 수 있습니다.__dict__
속성(예: 클래스에서 유형을 사용함)직접 사전 업데이트를 방지하기 위한 매핑ProxyType).
새 클래스 속성을 할당해야 하는 경우 사용할 수 있습니다.setattr
주목할 가치가 있습니다.mappingproxy
JSON 시리즈화할 수 없습니다. 문제를 확인하여 이유를 알아보십시오.
또한 이러한 유형의 역사는 매우 흥미롭습니다.
- 파이썬 2.7:
type(A.__dict__)
돌아온다<type 'dict'>
~하듯이type(dict())
다음을 통해 새로운 속성을 할당할 수 있습니다.__dict__
,예.A.__dict__['foo'] = 'bar'
. - Python 3.0 - 3.2:
type(A.__dict__)
돌아온다<class 'dict_proxy'>
차이가 도입되었습니다.새 특성 할당 시도 중 제공되는TypeError
다음을 추가하려고 했습니다.dictproxy
공공 붙박이 타입으로. - Python 3.3: 추가 기능
<class 'mappingproxy'>
위에서 설명한 유형.
언급URL : https://stackoverflow.com/questions/32720492/why-is-a-class-dict-a-mappingproxy
'programing' 카테고리의 다른 글
Angular(각도)에서 수동으로 변경 감지 트리거 (0) | 2023.05.11 |
---|---|
Azure 리소스 그룹 템플릿에서 Application Insights 인스턴스에 대한 계측 키를 검색하는 방법은 무엇입니까? (0) | 2023.05.11 |
Linux에서 Bash를 사용하여 모든 출력을 파일로 리디렉션하시겠습니까? (0) | 2023.05.11 |
다른 목록에서 한 목록을 빼려면 어떻게 해야 합니까? (1) | 2023.05.11 |
Visual Studio 2010 - XAML 편집기의 속도가 매우 느립니다. (0) | 2023.05.11 |