I realize in the new style, getattr and setattr are supposed to reference something in a base class, but here is what I'm trying to do:
class tryit: def __init__(self, a, b): self.__dict__["a"] = a self.__dict__["b"] = b def __dir__(self): return [ "geta", "getb" ] def __getattr__(self, attr): if attr == "geta": return self.__dict__["a"] elif attr == "getb": return self.__dict__["b"] else: raise AttributeError x = tryit(1, 2) So, I'm OK with the fact that x.a, x.b, x.geta, and x.getb all work (I don't care too much about hiding a and b). What I would like is for the Python IDE drop-down to include geta and getb as choices, which I thought would be accomplished by overloading __dir__. Am I just using the wrong IDE (tried PythonWin from ActivePython so far)? Do I need to overload something else? Whenever people ask me for help, I usually want to know "so what are you trying to do?" Here goes. I'm trying to create a base C struct class where the creator of the derived class can provide a simple "C struct" definition, and the necessary information will be loaded into class instances. Something like this totaly contrived example: class file_header(c_struct): definition_text = """ typedef struct file_header // little endian align 32 error_if_pad { uint32 LengthInBytes; uint8 Revision; uint8 Reserved; uint16 Encoding; } file_header; """ def __init__(self, BinaryData = ""): c_struct.__init__(self, BinaryData) Header = file_header( File.read(sizeof(file_header)) ) if Header.LengthInBytes > 9: # The IDE gives me my members as choices!! HappyWithLength() else: Header.LengthInBytes = 9 # Again, nice drop-down from IDE Header.Encoding = NewEncoding( File ) Header.GUITreeControlEdit() OutFile.write( Header.GetBinaryData() ) Thanks for any suggestions! -Brian -- http://mail.python.org/mailman/listinfo/python-list