isinstance() и type() определяют тип данных

Python

Это 10-й день моего участия в ноябрьском испытании обновлений. Узнайте подробности события:Вызов последнего обновления 2021 г.

Чтобы определить, относится ли переменная к определенному типу данных, вы можете использоватьisinstance()также можно использоватьtype().

type()

class type(namebasesdict,  **kwds)

  • Когда параметр передается, возвращаетobject тип. Возвращаемое значение представляет собой тип объекта, обычно такой же, какobject.__class__Возвращаемый объект тот же.
  • Когда передаются три аргумента, возвращается объект нового типа.(Не используйте его, не смотрите на него)
    • nameСтроки являются именами классов и станут__name__Атрибуты;
    • basesКортеж содержит базовый класс и станет__bases__свойство; если оно пустое, оно добавит окончательный базовый класс для всех классовobject
    • dictСловарь содержит определения свойств и методов для тела класса; он становится__dict__Свойства могут быть скопированы или упакованы перед.

Используйте его, чтобы определить тип данных:

s = 'hello world'

print(type(s) == str)
>> 
True

isinstance()

isinstance(objectclassinfo)

  • если objectпараметрclassinfoЭкземпляр параметра или его (прямой, косвенный илиvirtual) экземпляр подкласса, затем возвратTrue. если objectне является объектом данного типа, всегда возвращаетFalse.
  • если classinfoпредставляет собой кортеж типовых объектов (или рекурсивно сгенерированный из такого кортежа) или несколько типовтип союза, потом, когдаobjectявляется экземпляром любого из этих типов и возвращаетTrue. если classinfoне является типом или кортежем типов, вызоветTypeErrorисключение.

Используйте его, чтобы определить тип данных:

s = 'hello world'

print(isinstance(s,str))
>> 
True

Вы также можете это:

s = 'hello world'

print(isinstance(s,(str,int,float)))
print(isinstance(s,(bool,int,float)))
>> 
True
False

Разница между isinstance() и type()

  • type() не считает подклассы типом суперкласса, независимо от наследования.
  • isinstance() будет рассматривать подкласс как тип суперкласса, учитывая отношения наследования.

Официально сказано:Если вы хотите определить, являются ли два типа одинаковыми, рекомендуется использовать isinstance()..

image.png

так как:

class F:
    def __init__(self):
        pass
class S(F):
    def __init__(self):
        pass


print(isinstance(F(), F))
print(type(F()) == F)
print(isinstance(S(), F))
print(type(S()) == F)
True
True
True
False

Видно, что функция isinstance() более мощная, поэтому рекомендуется использовать isinstance(), чтобы определить, совпадают ли эти два типа.