self.__dict__ tricks
Tim Johnson
tim at johnsons-web.com
Thu Oct 29 22:16:37 EDT 2009
This is not a request for help but a request for comments:
Consider the following code and note that
1)The initializer uses the dictionary style of arguments
2)The check loop executes before all of the class variables
are declared
## --------------------------------------------------------------------
class formLoader():
def __init__(self,**kw):
self.fileName = None
self.record = None
self.string = None
## Uncomment below to see that only fileName, record and string
## are recorded by __dict__
#std.debug("self.__dict__",self.__dict__)
for k in kw.keys():
if k in self.__dict__:
self.__dict__[k] = kw[k]
else:
raise AttributeError("%s is not a class member. Use one of ('%s')"
% (repr(k),"', '".join(self.__dict__.keys())))
self.tokens = ["form","input","textarea","select","option","form"]
self.inputTypes = ["button","checkbox","file","hidden","image","password",
"radio","reset","submit","text"]
self.inputValTypes = ["file","hidden","password","text"]
self.colnames = [] ## case-insensitive column names
self.formIndexes = [] ## Index forms in outer list
## .....
## --------------------------------------------------------------------
Now if I were to code something like the following:
fml = formLoader(fileName=doc,tokens="tim")
## Note that `tokens' is passed as a named argument.
I get the following error message:
AttributeError: 'tokens' is not a class member. Use one of ('record',
'string', 'fileName')
I am not complaining! This is a good thing and a cool idiom.
Placing the the check loop after _only_ the keywords that I wanted to
allow _disallows_ any others.
I'd welcome comments - such as any other applications.
Always a newbie ....
--
Tim
tim at johnsons-web.com
http://www.akwebsoft.com
More information about the Python-list
mailing list