a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
fonte
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
Nas versões Python anteriores à 3.0, existem dois tipos de strings "strings simples" e "strings unicode". Seqüências de caracteres simples ( str
) não podem representar caracteres fora do alfabeto latino (ignorando os detalhes das páginas de código para simplificar). Strings Unicode ( unicode
) podem representar caracteres de qualquer alfabeto, incluindo alguns fictícios como o Klingon.
Então, por que ter dois tipos de cadeias de caracteres, não seria melhor ter apenas Unicode, pois isso cobriria todos os casos? Bem, é melhor ter apenas Unicode, mas o Python foi criado antes do Unicode ser o método preferido para representar as strings. Leva tempo para fazer a transição do tipo de string em uma linguagem com muitos usuários. No Python 3.0, finalmente, todas as strings são Unicode.
A hierarquia de herança das seqüências de caracteres Python anteriores à 3.0 é:
object
|
|
basestring
/ \
/ \
str unicode
'basestring' introduzido no Python 2.3 pode ser considerado um passo na direção da unificação de cadeias, pois pode ser usado para verificar se um objeto é uma instância str
ouunicode
>>> 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
str
ebyte
ainda filhos debasestring
? Vale a pena adicionar uma observação sobre isso.basestring
estr
nem asbytes
duas subclassesobject
diretamente. Mas note que isso faz sentido, pois Py2str
não é o mesmo que Py3bytes
.basestring
deve ser pensado como "cadeia de caracteres", da qual o Py3 possui apenas ostr
. Portanto, a2to3
ferramenta substituibasestring
porstr
.Todas as cadeias são cadeias de base, mas cadeias unicode não são do tipo str. Tente isso:
fonte
Realmente o que você está perguntando é a diferença entre as classes basestring e str.
Str é uma classe que herda de basestr. Mas cadeias unicode também existem, como outras, se você quiser criar uma.
fonte
Basestring é a superclasse de string. No seu exemplo, a é do tipo "str", portanto, é uma cadeia de base e uma str
fonte