A class for C-like structuures in Python
Neil Schemenauer
nascheme at news.cnri.reston.va.us
Wed Aug 9 09:59:26 EDT 2000
Thomas Gagne <tgagne at ix.netcom.com> wrote:
>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.
__setattr__ is powerful magic. You have to be careful. This
should work better:
class Struct:
def __init__(self, **kw):
self.__dict__["_members"] = kw
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
def test():
mystruct = Struct(a=1, b=10)
print mystruct.a
mystruct.a = 2
print mystruct.a
Hint: using self.__dict__ avoids calling __setattr__.
Neil
More information about the Python-list
mailing list