В чем разница между isinstance('aaa', basestring) и isinstance('aaa', str)?


a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
4 136

4 ответа:

в версиях Python до 3.0 есть два вида строк "простые строки"и" строки unicode". Простые строки (str) не может представлять символы вне латинского алфавита (игнорируя детали кодовых страниц для простоты). Строки Юникода (unicode) может представлять символы из любого алфавита, включая некоторые вымышленные, такие как Клингон.

так почему же два вида строк, не было бы лучше просто иметь Unicode, так как это будет охватывать все случаи? Ну это лучше иметь только Unicode, но Python был создан до того, как Unicode стал предпочтительным методом представления строк. Требуется время для перехода типа string на язык со многими пользователями, в Python 3.0, наконец, все строки являются Unicode.

иерархия наследования строк Python pre-3.0:

          object
             |
             |
         basestring
            / \
           /   \
         str  unicode

'basestring', введенный в Python 2.3, можно рассматривать как шаг в направлении унификации строк, поскольку его можно использовать для проверки является ли объект экземпляром str или unicode

>>> string1 = "I am a plain string"
>>> string2 = u"I am a unicode string"
>>> isinstance(string1, str)
True
>>> isinstance(string2, str)
False
>>> isinstance(string1, unicode)
False
>>> isinstance(string2, unicode)
True
>>> isinstance(string1, basestring)
True
>>> isinstance(string2, basestring)
True

все строки являются базовыми, но строки unicode не имеют типа str. Попробуйте вместо этого:

>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False

на самом деле то, что вы спрашиваете, это разница между классом basestring и str.

Str-это класс, который наследуется от basestr. Но строки unicode также существуют, как и другие, если вы хотите их сделать.

>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True

Basestring-это суперкласс string. В вашем примере a имеет тип " str " таким образом, это и basestring, и str