0
私はPythonでメタプログラミングを始めました。次のようなことをしたいと思います。metaclassing fromkeysとStructを使ったOrderdDict
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
しかし、この時点では実装方法はわかりません。私がメタプログラミングのために見る理由は、ThisFormat
の複数のバージョンが、それぞれ特定のフィールドキーとバイト構造(すなわち、Structのためのフォーマット)で存在することです。誰かが私にいくつかのポインタを与えることができますか?