В Python у вас есть синглтон None
, который действует довольно странно в определенных обстоятельствах:
>>> a = None
>>> type(a)
<type 'NoneType'>
>>> isinstance(a,None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types
Итак, <type 'NoneType'>
показывает, что None
не является типом, но это NoneType
. Однако, когда вы запускаете isinstance(a,NoneType)
, он отвечает на ошибку: NameError: name 'NoneType' is not defined
Теперь, учитывая это, если у вас есть функция с введенным значением по умолчанию, установленным на None
, и вам нужно проверить, вы бы сделали следующее:
if variable is None:
#do something
else:
#do something
В чем причина, по которой я не могу сделать следующее:
if isinstance(variable,None): #or NoneType
#do something
else:
#do something
Я просто ищу подробное объяснение, чтобы лучше понять это.
Изменить: хорошее приложение
Скажем, я хотел использовать isinstance
, чтобы я мог что-то сделать, если variable
- это множество типов, включая None
:
if isinstance(variable,(None,str,float)):
#do something