我注意到在python2中创建类时,它将属性存储在dict_proxy对象中:

>>> class A(object):
...     pass
>>> A.__dict__
dict_proxy({....})

但在python3中__dict__返回mappingproxy
>>> class A(object):
...     pass
>>> A.__dict__
mappingproxy({....})

他们两个有什么区别吗?

最佳答案

没有真正的区别,它just got renamed
当提议在issue #14386中公开typing模块中的类型时,对象也被重命名:
我想在这个名字上骑自行车。我想应该是
映射代理。(我们不太使用“视图”,而是使用
它,对于键/值/项视图,我认为是非常不同的。阿尔索
collections.abc已经将MappingView定义为
键视图和朋友。)

无论如何,你不是第一个说我们已经用“view”定义了其他东西的人,所以我写了一个新的补丁来使用“mappingproxy”名称(公开为types.MappingProxyType)。
更改made it into Python 3.3,因此在Python 3.2中您仍然可以看到旧名称。

08-28 04:56