A class for C-like structuures in Python
Thomas Gagne
tgagne at ix.netcom.com
Wed Aug 9 13:13:04 EDT 2000
I know everyone enjoys reading my reply to myself...
Well the latest version now has
*.member(name) # returns value of the member "name"
*.member(name, value) # returns value of member "name" after setting it to
value
*.fromBytes(astring) # loads the structure from a string buffer (like
after reading it)
-------------- next part --------------
import struct
class CStructure:
def __init__(self, theTuples):
self.members = {}
self.shape = theTuples
self.packFormat = ''
for n,f in self.shape:
self.members[n] = None
self.packFormat = self.packFormat + f
self.fromBytes(struct.pack('%dx' % (len(self))))
def checkMember(self, name):
if not self.members.has_key(name):
raise AttributeError, "No member is named " + name
def member(self, name, *value):
if len(value) == 0:
return self.getMember(name)
else:
return self.setMember(name, value[0])
def getMember(self, name):
self.checkMember(name)
return self.members[name]
def setMember(self, name, value):
self.checkMember(name)
self.members[name] = value
return value
def __len__(self):
return struct.calcsize(self.packFormat)
def asBytes(self):
bytes = ''
for n,f in self.shape:
if f[-1] == 'x':
bytes = bytes + struct.pack(f)
else:
bytes = bytes + struct.pack(f, self.members[n])
return bytes
def fromBytes(self, bytes):
values = struct.unpack(self.packFormat, bytes)
for i in range(len(values)):
self.setMember(self.shape[i][0], values[i])
return self
More information about the Python-list
mailing list