possible attribute-oriented class

Ken Newton krnewton at gmail.com
Fri Sep 4 00:46:01 CEST 2009

I have created the following class definition with the idea of making
a clean syntax for non-programmers to created structured data within a
python environment.

I would appreciate comments on this code. First, is something like
this already done? Second, are there reasons for not doing this?  If
this seems OK, how could I clean up the string conversion to have
indented format.

The expected use would have all items in the structure be simple
python types or AttrClass types. Code written in python could walk the
structure in a simple way to locate any desired values. Code in a
C/C++ extension should also be able to walk the structure to use any
value in the structure.

class AttrClass(object):
    """AttrClass lets you freely add attributes in nested manner"""

    def __init__(self):
    def __setitem__(self, key, value):
        return self.__dict__.__setitem__(key, value)
    def __repr__(self):
        return "%s(%s)" % (self.__class__.__name__, self.__dict__.__repr__())
    def __str__(self):
        ll = ['{']
        for k,v in self.__dict__.iteritems():
            ll.append("%s : %s" % (k, str(v)))
        return '\n'.join(ll) + '}'

def test():
    atr = AttrClass()
    atr.first = 1
    atr.second = 2
    atr.third = 'three'

    atrsub = AttrClass()
    atrsub.aaa = 'AAA'
    atrsub.bbb = 'BBB'

    atr.fourth = atrsub
    atr.fifth = 5

    print atr
    print repr(atr)
    print atr.fourth.aaa
 test() gives the following output:
second : 2
fifth : 5
fourth : {
aaa : AAA
bbb : BBB}
third : three
first : 1}

AttrClass({'second': 2, 'fifth': 5, 'fourth': AttrClass({'aaa': 'AAA',
'bbb': 'BBB'}), 'third': 'three', 'first': 1})


Ken Newton

More information about the Python-list mailing list