Mon projet actuel nécessite une utilisation intensive de champs de bits. J'ai trouvé un simple et fonctionnel Recette pour bit une classe de champ Mais cela manquait de quelques fonctionnalités dont j'avais besoin, j'ai donc décidé de l'étendre. Je viens de devoir mettre en œuvre À votre avis, cette implémentation répondrait aux conventions de En outre, j'ai utilisé la fonction acclamations, p>
Pete p> __ str __ code> et
__ RECR __ code> et je veux m'assurer que je suis à la suite de la convention. P>
__ str __ code> est censé être informel et conciser, donc je l'ai renvoyé la valeur décimale du champ de bit (c.-à-d.
STR (champ de bit 11) code> serait
"3" code>. P>
__ RECR __ code> est censé être une représentation officielle de l'objet, donc j'ai fait renvoyer la chaîne de bits réelle (c.-à-d.
REC (champ de bit 11) code> serait
"11" code>). p>
str code> et
REC code>? p>
bin () code> pour obtenir la chaîne de bits de la valeur stockée dans la classe. Ce n'est pas compatible avec Python <2.6, existe-t-il une méthode alternative? P>
3 Réponses :
J'envisageais d'avoir __ str __ code> renvoyer une représentation hexadécimale à la place. De cette façon, il est plus facile d'oeil de vue quelles sont les valeurs de bits réelles et donc plus utiles. Mais toujours assez concis (en fait, moins de caractères que la représentation décimale). P>
Le je aurais le dans le module Bitstring (que je maintienne) le J'éviterais d'utiliser la fonction __ rep __ code> doit être de préférence une chaîne qui pourrait être utilisée pour recréer l'objet, par exemple si vous utilisez
eval code> dessus - voir les docs ici . Ce n'est pas une science exacte, car elle peut dépendre de la manière dont l'utilisateur de votre module l'importait, par exemple. P>
__ str __ code> renvoyer la chaîne binaire et le
__ RECR __ code> retour
classname (binaire_string) code> ou tout ce qui pourrait être utilisé pour recréer l'objet. p>
__ str __ code> est Hexadecimal Si le bitstring est un multiple de 4 bits de long, sinon il est binaire ou une combinaison des deux. De plus, si le bitstring est très long, il est tronqué (vous ne voulez pas essayer d'imprimer une bite de 100 Mo dans une session interactive!) P>
bin () code> complètement si j'étais vous. La raison étant qu'elle ne peut pas être utilisée si votre bitstring commence avec zéro bits (voir ma question ici ). Je conseillerais d'utiliser l'utilisation d'une méthode ou d'une propriété code> code> à la place. P>
D'accord. Je pense que comme une règle Eval (REC (REP (X)) doit recréer un X aussi bien que possible. Pas sûr de Str, mais j'aime cette solution.
Le vôtre revient '11' mais si vous avez passé "11" à votre constructeur, vous ne recevriez pas le même bitfield en conséquence. Donc ce __ RECR __ code> doit renvoyer quelque chose qui, s'il est passé à votre constructeur, créerait un nouvel objet qui est une copie identique de l'original. P>
__ rep __ code> n'est pas ok. P>
Il existe des modules de terrain de terrain disponibles, tels que Bitstring, Bitarray et Bitvector (Vérifiez PYPI). Pourrait valoir la peine de les vérifier si vous ne voulez pas réinventer la roue.
Je sais que je réinvente la roue ici, mais je fais ce projet pour le plaisir et c'est insatisfaisant d'utiliser le code Quelqu'un d'autre est écrit dans ce contexte (idiot je sais!).