Doing type('')
фактически эквивалентно str
и types.StringType
поэтому type('') == str == types.StringType
будет оцениваться как "True
"
Обратите внимание, что строки Unicode, содержащие только ASCII, не будут работать при проверке типов таким образом, поэтому вы можете захотеть сделать что-то вроде assert type(s) in (str, unicode)
или assert isinstance(obj, basestring)
, последняя из которых была предложена в комментариях 007Brendan и, вероятно, предпочтительным.
isinstance()
полезно, если вы хотите спросить, является ли объект экземпляром класса, например:
class MyClass: pass
print isinstance(MyClass(), MyClass) # -> True
print isinstance(MyClass, MyClass()) # -> TypeError exception
Но для основных типов, например str
, unicode
, int
, float
, long
и т. Д. С запросом type(var) == TYPE
будет работать нормально.