关于python:使用isinstance()可以覆盖类型

Use of isinstance() can overwrite type

本问题已经有最佳答案,请猛点这里访问。

使用isinstance()改变了dict的类类型。为什么会这样?我知道使用内置设备可以防止这种情况的发生,但我想更好地理解为什么会发生这种情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
250     def printPretty(records,num,title='Summary:'):
251         import pdb; pdb.set_trace()
252         if isinstance(records, list):
253             print ("\
{}\
{}"
.format(title.center(120),"="*120))
254             table = list()
255             for i in records:
...
263         elif isinstance(records, dict):
264  ->         for key in records:
265                 if isinstance(records[key], Param):
266                     for i in records[key]:
267                         print (i)
268                 print ("")
269    
(Pdb) type(records)
<class 'dict'>
(Pdb) type(dict)
<class 'type'>


我认为你的困惑在于,江户十一〔0〕。让我们完全放弃您的示例,除了最后两行,我将使用交互式Python来演示。

1
2
3
4
>>> type(dict)
<type 'type'>
>>> type(dict())
<type 'dict'>

这是因为dict不是字典,而是字典的类型。dict(){}{1:2, ...}是字典的实例。这些实例的类型为dict,满足isinstance(___, dict)