Як найкраще перевірити, чи є заданий об'єкт заданим типом? Як щодо перевірки того, чи об'єкт є успадкований від заданого типу?
Нехай є об'єкт o
. Як мені перевірити, чи він є об'єктом типу str
?
Щоб перевірити, чи є o
екземпляром str
або будь-якого підкласу str
, використовуйте isinstance (це буде "канонічний" спосіб):
if isinstance(o, str):
Перевірити, чи тип o
є саме str
(виключити підкласи):
if type(o) is str:
Наступне також працює і може бути корисним у деяких випадках:
if issubclass(type(o), str):
Відповідну інформацію див. у розділі Вбудовані функції у довіднику бібліотеки Python.
Ще одне зауваження: у цьому випадку, якщо ви використовуєте python 2, можливо, ви дійсно захочете використовувати:
if isinstance(o, basestring):
оскільки це також буде перехоплювати рядки Unicode (unicode
не є підкласом str
; як str
, так і unicode
є підкласами basestring
). Зверніть увагу, що basestring
більше не існує в python 3, де існує суворе розділення рядків (str
) та двійкових даних (bytes
).
Альтернативно, isinstance
приймає кортеж класів. Це поверне True, якщо x є екземпляром будь-якого підкласу будь-якого з (str, unicode):
if isinstance(o, (str, unicode)):
isinstance(o, str)
поверне True
, якщо o
є str
або має тип, який успадковується від str
.
type(o) is str
поверне True
тоді і тільки тоді, коли o
є рядком. Поверне значення False
, якщо o
є типом, успадкованим від str
.
isinstance(o, str)