Skip to content

Instantly share code, notes, and snippets.

@tkaemming
Created July 14, 2012 18:48
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save tkaemming/3112639 to your computer and use it in GitHub Desktop.
Save tkaemming/3112639 to your computer and use it in GitHub Desktop.
named structs
#!/usr/bin/env python
from collections import namedtuple
from struct import Struct
class NamedStruct(Struct):
def __init__(self, name, fields, byteorder=None):
fmt = (byteorder or '') + ''.join(field[0] for field in fields)
super(NamedStruct, self).__init__(fmt)
self.namedtuple = namedtuple(name, (field[1] for field in fields))
def pack(self, *args, **kwargs):
arguments = self.namedtuple(*args, **kwargs)
return super(NamedStruct, self).pack(*arguments)
def pack_into(self, buf, offset, *args, **kwargs):
arguments = self.namedtuple(*args, **kwargs)
return super(NamedStruct, self).pack_into(buf, offset, *arguments)
def unpack(self, *args, **kwargs):
unpacked = super(NamedStruct, self).unpack(*args, **kwargs)
return self.namedtuple(*unpacked)
def unpack_from(self, *args, **kwargs):
unpacked = super(NamedStruct, self).unpack_from(*args, **kwargs)
return self.namedtuple(*unpacked)
if __name__ == '__main__':
ns = NamedStruct('Header', fields=(
('b', 'length'),
))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment