type - string python
¿Cuál es la diferencia entre isinstance(''aaa'', basetring) e isinstance(''aaa'', str)? (4)
Basestring es la superclase de cadena. En su ejemplo, a es de tipo "str" por lo tanto, es a la vez una base y una str
a=''aaaa''
print isinstance(a, basestring)#true
print isinstance(a, str)#true
En las versiones de Python anteriores a 3.0 hay dos tipos de cadenas "strings simples" y "strings unicode". Las cadenas str
( 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 de ficción, 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 únicamente Unicode, pero se creó Python antes de que Unicode fuera el método preferido para representar cadenas. Lleva tiempo transitar el tipo de cadena en un idioma con muchos usuarios, en Python 3.0 finalmente sucede que todas las cadenas son Unicode.
La jerarquía de herencia de cadenas Python pre-3.0 es:
object
|
|
basestring
/ /
/ /
str unicode
La "basetring" introducida en Python 2.3 puede considerarse como un paso en la dirección de la unificación de cadenas, ya que puede utilizarse para verificar si un objeto es una instancia de str
o 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
Realmente lo que estás preguntando es la diferencia entre la clase de base y de str.
Str es una clase que hereda de basestr. Pero también existen cadenas Unicode, como otras, si quisieras crear una.
>>> a = u''aaaa''
>>> isinstance(a, str)
False
>>> isinstance(a, basestring)
True
Todas las cadenas son cadenas básicas, pero las cadenas unicode no son del tipo str. Pruebe esto en su lugar:
>>> a=u''aaaa''
>>> print isinstance(a, basestring)
True
>>> print isinstance(a, str)
False