47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
![]() |
'''
|
||
|
Really simplistic walker-processable hierobjects, doesn't
|
||
|
have parent attributes, every element has an __attrDict__
|
||
|
item and a childlist. This is different from the mechanisms
|
||
|
we'll want to use for multi-tree systems, but it's fairly
|
||
|
close. Should be fairly simply worked with.
|
||
|
'''
|
||
|
class WalkerAble:
|
||
|
'''
|
||
|
Simple hierarchic objects with the following elements
|
||
|
|
||
|
__attrDict__ -- app-specific attributes
|
||
|
__childlist__ -- childen of this node
|
||
|
__gi__ -- "type" or Generic Indicator of this node
|
||
|
__childlist__append__ -- as you'd expect, method on childlist to add an element
|
||
|
'''
|
||
|
def __init__(self, childlist=None, attrDict=None, gi=None):
|
||
|
self.__dict__['__attrDict__'] = attrDict or {}
|
||
|
self.__dict__['__childlist__'] = childlist or []
|
||
|
self.__dict__['__gi__'] = gi or ''
|
||
|
self.__dict__['__childlist__append__'] = self.__childlist__.append
|
||
|
|
||
|
def __getattr__(self, attrName):
|
||
|
'''
|
||
|
Note: you can store attributes with the same names as
|
||
|
the reserved names, but to get them back, you'll need
|
||
|
to read it directly out of the attrDict
|
||
|
'''
|
||
|
if attrName != '__attrDict__':
|
||
|
try:
|
||
|
return self.__attrDict__[attrName]
|
||
|
except KeyError:
|
||
|
pass
|
||
|
raise AttributeError, attrName
|
||
|
|
||
|
def __setattr__(self, attrName, attrVal):
|
||
|
self.__attrDict__[attrName] = attrVal
|
||
|
def __setGI__(self, gi):
|
||
|
self.__dict__['__gi__'] = gi
|
||
|
def __repr__(self):
|
||
|
return '''<WalkerAble %(__gi__)s %(__attrDict__)s %(__childlist__)s>'''%self.__dict__
|
||
|
|
||
|
# copy functions
|
||
|
# def __getinitargs__(self):
|
||
|
# return (self.__childlist__, self.__attrDict__, self.__gi__)
|
||
|
|