T
tbrianedgar
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
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