Использование isinstance () может перезаписать тип

Использование isinstance() изменило тип класса dict. Почему это происходит? Я знаю, что использование встроенных команд может помешать, но я хочу лучше понять, почему это происходит.

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>

person user113411    schedule 19.05.2017    source источник
comment
isinstance не изменит тип вещей. Ничто здесь не указывает на то, что тип чего-либо был изменен.   -  person user2357112 supports Monica    schedule 20.05.2017
comment
Как вы думаете, почему произошла смена типа?   -  person user2357112 supports Monica    schedule 20.05.2017
comment
Ваш вопрос предполагает, что вы ожидаете некоторых других результатов от type вызовов, которые вы делаете в конце, но неясно, чего вы ожидаете вместо этого. Можете пояснить, чего вы ожидали и почему?   -  person Blckknght    schedule 20.05.2017
comment
stackoverflow.com/questions/ 100003 /   -  person Stephen Rauch    schedule 20.05.2017


Ответы (1)


Думаю, ваше замешательство заключается в том, что type(dict) != dict. Давайте полностью отбросим ваш пример, за исключением двух последних строк, для представления которых я буду использовать интерактивный Python.

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

Это потому, что dict - это не словарь, а разновидность словарей. dict() или {} (или {1:2, ...}) являются экземплярами словарей. Эти экземпляры имеют тип dict и удовлетворяют isinstance(___, dict).

person Cireo    schedule 19.05.2017
comment
Спасибо! Совершенно верно, я запуталась и ваш ответ пояснил. - person user113411; 21.05.2017