changeset 04b9d1e7ef2c in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=04b9d1e7ef2c
description:
python: Add a utility for nested attribute dicts.
Change attrdict so that attributes that begin with an underscore don't
go into the dict.
diffstat:
1 file changed, 2 insertions(+), 1 deletion(-)
src/python/m5/util/attrdict.py | 3 ++-
diffs (59 lines):
diff -r 05fd71ca96db -r 04b9d1e7ef2c src/python/m5/util/attrdict.py
--- a/src/python/m5/util/attrdict.py Fri Oct 10 10:15:00 2008 -0700
+++ b/src/python/m5/util/attrdict.py Fri Oct 10 10:15:00 2008 -0700
@@ -26,16 +26,17 @@
#
# Authors: Nathan Binkert
-__all__ = [ 'attrdict', 'optiondict' ]
+__all__ = [ 'attrdict', 'multiattrdict', 'optiondict' ]
class attrdict(dict):
+ """Wrap dict, so you can use attribute access to get/set elements"""
def __getattr__(self, attr):
if attr in self:
return self.__getitem__(attr)
return super(attrdict, self).__getattribute__(attr)
def __setattr__(self, attr, value):
- if attr in dir(self):
+ if attr in dir(self) or attr.startswith('_'):
return super(attrdict, self).__setattr__(attr, value)
return self.__setitem__(attr, value)
@@ -44,13 +45,23 @@
return self.__delitem__(attr)
return super(attrdict, self).__delattr__(attr, value)
+class multiattrdict(attrdict):
+ """Wrap attrdict so that nested attribute accesses automatically create
+ nested dictionaries."""
+ def __getattr__(self, attr):
+ try:
+ return super(multiattrdict, self).__getattr__(attr)
+ except AttributeError:
+ d = optiondict()
+ setattr(self, attr, d)
+ return d
+
class optiondict(attrdict):
+ """Modify attrdict so that a missing attribute just returns None"""
def __getattr__(self, attr):
try:
return super(optiondict, self).__getattr__(attr)
except AttributeError:
- #d = optionsdict()
- #setattr(self, attr, d)
return None
if __name__ == '__main__':
@@ -68,3 +79,9 @@
del x.z
print dir(x)
print(x)
+
+ x = multiattrdict()
+ x.y.z = 9
+ print x
+ print x.y
+ print x.y.z
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev