Representar tamanys d'objectes sense números màgics
Al igual que la millor forma de representar es la duració (en temps) es evitant gastar números màgics amb datetime.timedelta()
, també deuriem poder expresar el tamany (bits i bytes) d’un fitxer d’una forma senzilla. Per això, i com que no vaig trobar cap llibreria que m’ho permetera, vaig decidir crear-la jo.
Com diria el meme:
This is REAL code written by REAL PROGRAMMERS:
GiB_1_IN_BYTES: int = 1_073_741_824
MiB_200_IN_BYTES: int = 209_715_200
MiB_50_IN_BYTES: int = 52_428_800
MiB_30_IN_BYTES: int = 31_457_280
Amb octet el codi es podria reescriure d’esta manera (encara que de fet ja no caldria crear constants perquè es prou autoexplicatiu):
from octet import GiB, MiB, Byte
GiB_1_IN_BYTES: int = GiB(1).convert_to(Byte).value
MiB_200_IN_BYTES: int = MiB(200).convert_to(Byte).value
MiB_50_IN_BYTES: int = MiB(50).convert_to(Byte).value
MiB_30_IN_BYTES: int = (30 * MiB()).convert_to(Byte).value
Octet
Representar tamanys d’informació
Hi ha principalment dos formes de definir valors:
>>> 10 * KiB()
KiB(10)
>>> KiB(10)
KiB(10)
I una extra, a partir de la unitat més xicoteta, que en este cas es el bit
>>> KiB.from_minor_units(8192)
KiB(1)
Convertir entre unitats
>>> KiB(512).convert_to(MiB)
MiB(0.5)
>>> MiB(1).convert_to(bit)
b(8388608)
Comparacions lògiques
>>> Kb() == 1000 * b()
True
>>> 1000 * Kib() == 1024 * Kb()
True
>>> KiB(1) > KiB(0.7)
True