'Create a new feature dictionary, with the specified features.
:param features: The initial value for this feature
dictionary.  If ``features`` is a ``FeatStruct``, then its
features are copied (shallow copy).  If ``features`` is a
dict, then a feature is created for each item, mapping its
key to its value.  If ``features`` is a string, then it is
processed using ``FeatStructReader``.  If ``features`` is a list of
tuples ``(name, val)``, then a feature is created for each tuple.
:param morefeatures: Additional features for the new feature
dictionary.  If a feature is listed under both ``features`` and
``morefeatures``, then the value from ``morefeatures`` will be
used.'

def __init__(self, features=None, **morefeatures):

    if isinstance(features, string_types):
        FeatStructReader().fromstring(features, self)
        self.update(**morefeatures)
    else:
        self.update(features, **morefeatures)
