Интересно почему класс __dict__
a mappingproxy
, но экземпляр __dict__
просто плоскость dict
>>> class A:
... pass
>>> a = A()
>>> type(a.__dict__)
<class 'dict'>
>>> type(A.__dict__)
<class 'mappingproxy'>
mappingproxy является просто dict без __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
<час> mappingproxy начиная с Python 3.3. Следующий код показывает типы dict:
class C:pass
ci=C()
print(type(C.__dict__)) #<class 'mappingproxy'>
print(type(ci.__dict__)) #<class 'dict'>