哪种方法可以测试字典类型?

Jac*_*ine 4 python dictionary isinstance

为什么有这么多不同的方法来测试字典?如果对象是字典,最现代的测试方法是什么?

adict = {'a': 1}

In [10]: isinstance(adict, types.DictType)
Out[10]: True

In [11]: isinstance(adict, types.DictionaryType)
Out[11]: True

In [12]: isinstance(adict, dict)
Out[12]: True

In [13]: isinstance(adict, collections.Mapping)
Out[13]: True

In [14]: isinstance(adict, collections.MutableMapping)
Out[14]: True
Run Code Online (Sandbox Code Playgroud)

Vee*_*rac 10

types.DictType并且types.DictionaryType不推荐使用(嗯,在Python 3中删除)别名dict.

collections.Mapping并且collections.MutableMapping抽象基类(ABCs),因此它们适用于不是子类的映射dict.通常,这使它们成为更好的选择,尽管偶尔更严格的类型检查会有所帮助.

所以基本上,按顺序检查

  • 如果可能的话,没有一个(鸭型)

  • collections.Mapping 如果你不需要变异

  • collections.MutableMapping 如果你确实需要突变

  • dict如果你需要它实际上是一种dict类型(这应该是罕见的)

  • types.DictType或者types.DictionaryType如果你想支持真正的旧版本