[Python-es] Classe para tratamiento de bits

Chema Cortes pych3m4 en gmail.com
Mar Ago 28 15:59:12 CEST 2007


El 2007/8/28, Xin <xinxic en gmail.com> escribió:

> Hace poco tube la necesidad de trabajar con streams de bits de
> diferentes tamaños y poder extraer diferentes valors de estos. Como no
> he encontrado ningun tipo de mòdulo o classe me la he hecho yo mismo.
>
> La idea és poder trabajar con ello como si de un número de tratara. Así
> que su funcionamiento és el siguiente:
>
> Quizàs faltaria alguna funcion más, però para mi ya tenia suficiente.
> Y también seria mejor que no guardara todos los sub-valores.
> Espero que os sirva. Este és el codigo.

Creo que está perfecto. Lo único que haría yo sería guardar la cadena
con los bits en lugar de los subvalores. Así mismo, me apoyaría en el
rebanado (slice) que tienen las cadenas para implementar el
__getitem__. En otro orden de cosas, para chequear tipos es más
conveniente hacerlo con la función isinstance(<objeto>,<tipo>) para
evitarse sorpresas (por ejemplo, tu programa falla si usaras una
instancia Bits() como índice en el __getitem__).

class Bits(long):
  ...
  def __init__(self,value,start=None,end=None,base=10):
        self.value=value
        self.base=base
  ...

  def __getitem__(self,key):
    return Bits(self.value[key],base=self.base)

Faltan las comprobaciones que tenías.



Más información sobre la lista de distribución Python-es