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

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

Ответ 1

В версиях Python до 3.0 существует два типа строк: "простые строки" и "строки Unicode". Обычные строки (str) не могут представлять символы за пределами латинского алфавита (для простоты игнорирования деталей кодовых страниц). Строки Unicode (unicode) могут представлять символы из любого алфавита, включая некоторые вымышленные, такие как Klingon.

Итак, почему есть два типа строк, не лучше ли было бы иметь Юникод, поскольку это будет охватывать все случаи? Ну, лучше иметь только Unicode, но Python был создан до того, как Unicode стал предпочтительным методом представления строк. Требуется время, чтобы перевести тип строки на языке со многими пользователями, в 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

Ответ 2

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

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

Ответ 3

Действительно, вы спрашиваете, является ли разница между базой и классом str.

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

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

Ответ 4

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