* Using the __dict__ attribute to store user-defined values.

Dict-like behavior is exemplified by this class although it is *not*
  derived from a dict.
master
wirawan 13 years ago
parent 6d043f6721
commit 3ac8e37b35
  1. 27
      params/params_struct.py

@ -1,4 +1,4 @@
# $Id: params_struct.py,v 1.1 2011-03-10 17:17:48 wirawan Exp $ # $Id: params_struct.py,v 1.2 2011-03-10 19:21:33 wirawan Exp $
# #
# wpylib.params.params_struct module # wpylib.params.params_struct module
# Created: 20110310 # Created: 20110310
@ -28,7 +28,8 @@ CHARACTERISTICS/USAGE PATTERN
* Just like dict, it does not enforce a particular structure. * Just like dict, it does not enforce a particular structure.
* Use words only as keys (i.e. keys are valid python identifiers). * Use words only as keys (i.e. keys are valid python identifiers).
* Do not prepend and append two underscores at the same time. * User fields should not use keywords prepended and appended by two underscores
(those names are reserved by python).
""" """
@ -39,11 +40,21 @@ class Struct(object):
No particular structure is assumed. No particular structure is assumed.
Results are fetchable by either X.member or X['member'] syntax. Results are fetchable by either X.member or X['member'] syntax.
Limited dict-like operations are supported.""" Limited dict-like operations are supported."""
def __init__(self, __src__=None, **p):
"""Initializes the structure.
The arguments will be copied into the structure as the initial values
of the structure.
They can be a dict-like object (first argument), or "key=value"-type
argument passing.
"""
if __src__: self.__dict__.update(__src__)
self.__dict__.update(p)
def __getitem__(self, item): def __getitem__(self, item):
if hasattr(self, item): return self.__dict__[item]
return getattr(self, item) def __setitem__(self, item, val):
else: self.__dict__[item] = val
raise KeyError, "Invalid result name: %s" % (item)
def __contains__(self, item): def __contains__(self, item):
#return item in dir(self) return item in self.__dict__
return hasattr(self, item) def __iter__(self):
return self.__dict__.__iter__()

Loading…
Cancel
Save