In adding the ability to refer to field values using dbfFile.field
notation, I learned how to use __getattr__ and __setattr__ . After some
trial and error, I got it working. But as part of my trials, I added
some print statements to debug stuff. The ones I added to __setattr__
work as expected, but the one in __getattr__ seems to get called just
under 1000 times for every __getattr__ call!
Something is obviously not right here - but I'm at a loss to understand
what's going on. I've pared down my code to still show it happening &
included it below. If you run this program & pipe the output to a file,
you'll get just under 14000 debug lines. Any ideas? Thanks!
--
Greg
# ----------------------------------------------------------------------
----------
class test:
"""Introspectio n test"""
#----------------------------------------
def __init__(self,f ilename):
print '** __init__'
self._filename= filename
self._del=' '
self._dirty=Fal se
self._open=Fals e
self._rec=[]
self._recno = 1
#----------------------------------------
def __getattr__(sel f, key):
""" Return DBF record values by field name """
print "_ga: " + key
try:
return self._rec[self._fldNames. index(key.upper ())]
except:
raise AttributeError( "Unknown Field: %s" % ( key ))
#----------------------------------------
def __setattr__(sel f, key, val):
""" Update DBF record values by field name """
print "_sa: %s: %s" % (key, val)
try:
self._rec[self._fldNames. index(key.upper ())] = val
print " (DBF field assignment)"
except:
self.__dict__[key] = val # use the regular variable!
#raise AttributeError( "Unknown Field: %s" % ( key ))
#----------------------------------------
#----------------------------------------
if __name__ == "__main__":
f = test('test.dbf' )
f._del='*'
f._recno=123
f._recno=1
f._recno=2
f._recno=3
f._recno=4
f._recno=5
f._recno=6