Programing

__dict__ 클래스가 매핑 프록시 인 이유는 무엇입니까?

lottogame 2020. 12. 13. 08:33
반응형

__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

반응형