2017-05-19 50 views
-1

使用isinstance()更改类的类型dict 为什么会发生这种情况?我知道使用builtins会阻止,但我想更好地理解为什么会发生这种情况。使用isinstance()可以覆盖类型

250  def printPretty(records,num,title='Summary:'): 
251   import pdb; pdb.set_trace() 
252   if isinstance(records, list): 
253    print ("\n{}\n{}".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'><b> 
+2

'isinstance'不会改变事物的类型。此处没有任何内容表明任何类型都已更改。 – user2357112

+1

为什么你认为发生了任何类型的变化? – user2357112

+0

你的问题表明你期望得到一些不同的结果,你最终会从类型调用中得到一些不同的结果,但是并不清楚你期望的结果。你能澄清你的期望吗?为什么? – Blckknght

回答

1

我觉得你的困惑在于事实type(dict) != dict。除了最后两行,我将使用交互式python来呈现,让我们完全抛弃你的例子。

>>> type(dict) 
<type 'type'> 
>>> type(dict()) 
<type 'dict'> 

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

+0

谢谢!这是完全正确的,我很困惑,你的答案澄清。 – user113411