79 votes

Pourquoi est-bool une sous-classe de type int?

Au moment d'enregistrer un bool dans memcached via python-memcached j'ai remarqué qu'elle est retournée comme un entier. Vérification du code de la bibliothèque m'a montré qu'il est un lieu où l' isinstance(val, int) est vérifié pour drapeau de la valeur comme un nombre entier.

J'ai donc testé en python shell et de remarquer ce qui suit:

>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True

Mais pourquoi exactement est - bool une sous-classe de int?

Il sorte de sens, car un booléen, fondamentalement, est un int qui peuvent juste prendre deux valeurs, mais il a besoin de beaucoup moins d'opérations/de l'espace que d'une réelle entier (pas de l'arithmétique, un seul bit d'espace de stockage)....

93voto

Polynomial Points 12830

À partir d'un commentaire sur http://www.peterbe.com/plog/bool-is-int

C'est parfaitement logique, si vous avez été près lorsque le type bool a été ajouté à python (quelque part autour de 2.2 ou 2.3).

Avant l'introduction d'un réel de type bool, 0 et 1 ont été l' la représentation officielle de valeur de vérité, semblable à C89. Pour éviter inutilement de rupture non-idéal mais code de travail, le nouveau type bool nécessaires pour travailler comme 0 et 1. Cela va au-delà de la seule valeur de vérité, mais tous deux partie intégrante des opérations. Personne ne vous recommandons d'utiliser un booléen résultat dans un contexte numérique, ni la plupart des gens recommandent de tester l'égalité pour déterminer la valeur de vérité, personne n'a voulu trouver le dur juste combien code existant est de cette façon. Ainsi, la décision à prendre Vrai et Faux à la mascarade que 1 et 0, respectivement. Ce n'est qu'un artefact historique de l'évolution linguistique.

Le crédit va à dman13 pour cette belle explication.

25voto

Steven Rumbalski Points 16838

Voir PEP 285 -- Ajout d'un type bool. Corporation de passage:

6) Devrait bool hérite de l'int?

=> Oui.

Dans un monde idéal, bool peut-être mieux mis en œuvre comme un séparé de type integer qui sait comment effectuer en mode mixte l'arithmétique. Cependant, héritant bool int facilite l' la mise en œuvre énormément (en partie car tous les code C qui appelle PyInt_Check() continuera de travailler -- retourne true pour les sous-classes de type int).

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