Je suis nouveau à la métaprogrammation en python. Qu'est-ce que je voudrais faire quelque chose de similaire à ce qui suit:métaclasse OrderdDict avec des touches et Struct
from struct import Struct, error as StructError
from collections import OrderedDict
from typing import List, Hashable
from uuid import UUID
class StructBytes(type):
def __prepare__(name, bases, **kwds):
return OrderedDict()
# return a subclass/modification of OrdereDict with predefined keys and a Struct(fmt)
# __init__ should fill key values from Struct.unpack(bytes)
# in principle (although not necessary), this is a frozen ordered dict
...
class ThisFormat(metaclass=StructBytes, keys: List[Hashable], fmt: str)
def __init__(some_bytes: bytes)
try:
# call to __init__ should use specified formatting
except StructError:
# some_bytes not valid for this class
else:
# do post-processing on some field values, like:
self['uuid'] = UUID(bytes=self['uuid'])
for some_bytes in buffer:
structured = ThisFormat(some_bytes)
structured[field] # returns post-processed bytes
Mais à ce stade, je ne suis pas sûr de savoir comment l'implémenter. La raison que je vois pour la métaprogrammation est que plusieurs versions de ThisFormat
existent chacune avec des clés de champs spécifiques et une structure d'octets (c'est-à-dire un format pour Struct). Quelqu'un peut-il me donner quelques conseils?