A class for C-like structuures in Python
Thomas Gagne
tgagne at ix.netcom.com
Wed Aug 9 07:51:16 EDT 2000
Whoops!!
When I run my test program, I get a tracback that looks like __getattr__ calls
__checkname which calls __getattr__ which calls __checkname.... but I don't
see it in the code.
Traceback (innermost last):
File "./CStructure.py", line 14, in __checkname
if not self.members.has_key(name):
File "./CStructure.py", line 18, in __getattr__
self.__checkname(name)
File "./CStructure.py", line 14, in __checkname
if not self.members.has_key(name):
File "./CStructure.py", line 18, in __getattr__
self.__checkname(name)
File "./CStructure.py", line 14, in __checkname
.. until finally
File "./CStructure.py", line 18, in __getattr__
self.__checkname(name)
File "./CStructure.py", line 14, in __checkname
if not self.members.has_key(name):
File "./CStructure.py", line 18, in __getattr__
self.__checkname(name)
RuntimeError: Maximum recursion depth exceeded
-------------- next part --------------
import struct
class CStructure:
def __init__(self, theTuples):
self.fmt = ''
self.members = {}
self.shape = theTuples
for n,f in self.shape:
self.members[n] = None
self.fmt = self.fmt + f
def __checkname(self, name):
if not self.members.has_key(name):
raise AttributeError, "No struct-field is named " + name
def __getattr__(self, name):
self.__checkname(name)
return self.members[name]
def __setattr__(self, name, value):
self.__checkname(name)
self.members[name] = value
return value
def getFormat(self):
return self.fmt
def __len__(self):
return struct.calcsize(self.fmt)
def asBytes(self):
self.bytes = ''
for n,f in self.shape:
if f[-1] == 'x':
self.bytes = self.bytes + struct.pack(f)
else:
self.bytes = self.bytes + struct.pack(f, self.members[n])
return self.bytes
More information about the Python-list
mailing list