':param value:
A native Python datatype to initialize the object value with
:param contents:
A byte string of the encoded contents of the value
:param strict:
A boolean indicating if trailing data should be forbidden - if so, a
ValueError will be raised when trailing data exists in contents
:raises:
ValueError - when an error occurs with one of the children
TypeError - when an error occurs with one of the children'

def __init__(self, value=None, contents=None, strict=False):

    if (contents is not None):
        try:
            contents_len = len(contents)
            self._children = []
            offset = 0
            for spec in self._child_specs:
                if (offset < contents_len):
                    (child_value, offset) = _parse_build(contents, pointer=offset, spec=spec)
                else:
                    child_value = spec()
                self._children.append(child_value)
            if (strict and (offset != contents_len)):
                extra_bytes = (contents_len - offset)
                raise ValueError((u'Extra    data    -    %d    bytes    of    trailing    data    were    provided' % extra_bytes))
        except (ValueError, TypeError) as e:
            args = e.args[1:]
            e.args = (((e.args[0] + (u'\n                while    constructing    %s' % type_name(self))),) + args)
            raise e
    if (value is not None):
        if (self._children is None):
            self._children = ([None] * len(self._child_specs))
        for (index, data) in enumerate(value):
            self.__setitem__(index, data)
