Вариант без словарей, чисто на списках.
>>> class Book(list):
...
... def __init__(self, arg):
... super(Book, self).__init__(arg)
...
... def add_chapter(self, chapter):
... self.append(chapter)
...
... def remove_chapter(self, index):
... del self[index]
...
... def update_chapter(self, index, chapter):
... self[index] = chapter
...
... def __str__(self):
... out = []
... out.append('Book <')
... out.append('|'.join(map(str, self)))
... out.append('>')
... return ''.join(out)
...
>>> class Chapter(list):
...
... def __init__(self, arg):
... super(Chapter, self).__init__(arg)
...
... def add_field(self, field):
... self.append(field)
...
... def remove_field(self, index):
... del self[index]
...
... def update_field(self, index, field):
... self[index] = field
...
... def __str__(self):
... out = []
... out.append('Chapter <')
... out.append(','.join(map(str, self)))
... out.append('>')
... return ''.join(out)
...
>>> class Field(object):
...
... def __init__(self, value=None):
... self.value = value
...
... def add_value(self, value):
... self.value = value
...
... def remove_value(self):
... self.value = None
...
... def __str__(self):
... return str(self.value)
...
>>> book = Book([Chapter([Field('a'), Field('b')]),
... Chapter([Field('c'), Field('d')]),
... Chapter([Field('e'), Field('f')])])
>>>
>>> print book
Book <Chapter <a,b>|Chapter <c,d>|Chapter <e,f>>
>>>