Кой е най-добрият начин да проверите дали даден обект е от даден тип? Как да проверим дали обектът наследява от даден тип?
Да речем, че имам обект 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
е str. Ще върне False
, ако o
е от тип, който наследява от str
.
isinstance(o, str)