'Initialize this match
You can initialize either from a list of parts or from a bunch of
key/value pairs which are just like a shortcut for setting individual
properties.'

def __init__(self, *parts, **kw):

    self._parts = list(parts)
    self._dirty()
    for (k, v) in kw:
        setattr(self, k, v)
    self._locked = True
