166 votes

Quelle est la différence entre isinstance (' aaa ', basestring) et isinstance (' aaa ', str) ?

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

401voto

Tendayi Mawushe Points 10335

Dans les versions de Python antérieures à la version 3.0, il y a deux types de chaînes "de la plaine des chaînes" et "unicode". Plaine des chaînes de caractères (str) ne peut pas représenter les caractères en dehors de l'alphabet Latin (en ignorant les détails de pages de code pour des raisons de simplicité). Des chaînes Unicode (unicode) peuvent représenter des caractères à partir de l'alphabet, y compris certains de fiction, comme le Klingon.

Alors, pourquoi avez deux types de chaînes, ne serait-il pas mieux d'avoir de l'Unicode depuis qui permettrait de couvrir tous les cas? Eh bien, c'est mieux n'avoir qu'Unicode mais Python a été créé avant l'Unicode a été la méthode privilégiée pour représenter des chaînes de caractères. Il prend le temps de transition de type chaîne de caractères dans une langue avec de nombreux utilisateurs, en Python 3.0 c'est enfin le cas que toutes les chaînes de caractères Unicode.

La hiérarchie d'héritage de Python chaînes pré-3.0 est:

          object
             |
             |
         basestring
            / \
           /   \
         str  unicode

'basestring" mis en œuvre en Python 2.3 peut être considéré comme une étape dans la direction de la chaîne de l'unification, car il peut être utilisé pour vérifier si un objet est une instance d' str ou 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

8voto

Mark Byers Points 318575

Toutes les chaînes sont basestrings, mais les chaînes unicode ne sont pas de type Str. essayez ce lieu :

4voto

McPherrinM Points 2669

Vraiment ce que vous demandez est la différence entre la classe basestring et str.

Str est une classe qui hérite de basestr. Mais les chaînes unicode existent également, comme autres, si vous vouliez faire un.

1voto

Alan Points 21367

Basestring est la superclasse de chaîne. Dans votre exemple, une est de type « str » donc, c’est un basestring et un str

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X