Это 10-й день моего участия в ноябрьском испытании обновлений. Узнайте подробности события:Вызов последнего обновления 2021 г.
Чтобы определить, относится ли переменная к определенному типу данных, вы можете использоватьisinstance()
также можно использоватьtype()
.
type()
class
type
(name, bases, dict, **kwds)
- Когда параметр передается, возвращаетobject тип. Возвращаемое значение представляет собой тип объекта, обычно такой же, как
object.__class__
Возвращаемый объект тот же.Когда передаются три аргумента, возвращается объект нового типа.(Не используйте его, не смотрите на него)
nameСтроки являются именами классов и станут;__name__
АтрибутыbasesКортеж содержит базовый класс и станет.__bases__
свойство; если оно пустое, оно добавит окончательный базовый класс для всех классовobject
dictСловарь содержит определения свойств и методов для тела класса; он становится.__dict__
Свойства могут быть скопированы или упакованы перед
Используйте его, чтобы определить тип данных:
s = 'hello world'
print(type(s) == str)
>>
True
isinstance()
- если 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()..
так как:
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(), чтобы определить, совпадают ли эти два типа.