a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
fuente
a='aaaa'
print isinstance(a, basestring)#true
print isinstance(a, str)#true
En las versiones de Python anteriores a la 3.0 hay dos tipos de cadenas "cadenas simples" y "cadenas unicode". Las cadenas simples ( str
) no pueden representar caracteres fuera del alfabeto latino (ignorando los detalles de las páginas de códigos por simplicidad). Las cadenas Unicode ( unicode
) pueden representar caracteres de cualquier alfabeto, incluidos algunos ficticios como Klingon.
Entonces, ¿por qué tener dos tipos de cadenas? ¿No sería mejor tener Unicode ya que eso cubriría todos los casos? Bueno, es mejor tener solo Unicode, pero Python se creó antes de que Unicode fuera el método preferido para representar cadenas. Lleva tiempo hacer la transición del tipo de cadena en un idioma con muchos usuarios, en Python 3.0 finalmente es el caso de que todas las cadenas sean Unicode.
La jerarquía de herencia de las cadenas de Python anteriores a la 3.0 es:
object
|
|
basestring
/ \
/ \
str unicode
La 'cadena base' introducida en Python 2.3 puede considerarse como un paso en la dirección de la unificación de cadenas, ya que puede usarse para verificar si un objeto es una instancia de str
ounicode
>>> 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
ybyte
aún hijos debasestring
? Valdría la pena agregar una nota sobre esto.basestring
estr
ybytes
tanto subclaseobject
directa. Pero tenga en cuenta que esto tiene sentido, ya que Py2str
no es lo mismo que Py3bytes
.basestring
debe considerarse como "cadena de caracteres", de la cual Py3 solo tiene elstr
. Por lo tanto, la2to3
herramienta se reemplazabasestring
constr
.Todas las cadenas son cadenas de base, pero las cadenas unicode no son del tipo str. Intenta esto en su lugar:
fuente
Realmente lo que estás preguntando es la diferencia entre la clase basetr y str.
Str es una clase que hereda de basestr. Pero también existen cadenas unicode, como podrían existir otras, si quisieras crear una.
fuente
La cadena base es la superclase de cuerdas. En su ejemplo, a es del tipo "str", por lo tanto, es tanto una cadena base como un str
fuente