Каково различие между isinstance ('aaa', basestring) и isinstance ('aaa', ул.)?

a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
156
задан SilentGhost 30 December 2009 в 11:39
поделиться

4 ответа

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

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

Иерархия наследования строк на Python до 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
381
ответ дан 23 November 2019 в 21:48
поделиться

На самом деле вы спрашиваете о различии между базовыми строками и классом str.

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

>>> a = u'aaaa'
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True
4
ответ дан 23 November 2019 в 21:48
поделиться

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

.
1
ответ дан 23 November 2019 в 21:48
поделиться

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

>>> a=u'aaaa'
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False
8
ответ дан 23 November 2019 в 21:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: