#python #boolean #conditional-statements #python-class
Вопрос:
У меня есть список занятий:
[<class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'datetime.date'>, <class 'decimal.Decimal'>, <class 'decimal.Decimal'>, <class 'str'>, <class 'datetime.date'>, <class 'decimal.Decimal'>, <class 'decimal.Decimal'>, <class 'decimal.Decimal'>]
Я хочу выполнить логический тест, аналогичный isinstance():
[isinstance(x, str) for x in l]
но isinstance() принимает только объекты, а не классы.
Результаты, которые я хочу, чтобы приведенный выше список проверял, является ли класс строкой, были бы примерно такими:
[True, True, True, True, False, False, False, True, False, False, False, False]
Комментарии:
1. Используйте
issubclass
вместоisinstance
.2.Классы — это объекты. Проблема в том, что класс
str
не является экземпляромstr
; это экземплярtype
. Это подкласс сам по себе, но (если вы не беспокоитесь о подклассах) вы можете провести прямое сравнение классов сis
:[x is str for x in l]
.3. Спасибо @chepner! issubclass сработал.
Ответ №1:
Используйте ==
оператора:
[x == str for x in l]
Ответ №2:
Поскольку у вас есть список классов, вы захотите использовать issubclass
, а не isinstance
:
[issubclass(x, str) for x in l]
Из документов Python:
issubclass(class, classinfo)
Возвращает
True
, если класс является подклассом (прямым, косвенным или виртуальным)classinfo
. Класс считается подклассом самого себя.classinfo
может быть кортеж объектов класса или тип объединения, в этом случае возвращаетсяTrue
, если класс является подклассом любой записиclassinfo
. В любом другом случае возникаетTypeError
исключение.