def changed(self, *fields):
        """Test if one or more fields have changed.

        A field is considered to have changed if it has been marked as changed,
        or if any of its parent, or child, fields have been marked as changed.
        """
        S = super(Value, self).changed
        for fld in fields or (None,): # no args tests for any change
            if S(fld):
                return True
        return False
Test if one or more fields have changed.

        A field is considered to have changed if it has been marked as changed,
        or if any of its parent, or child, fields have been marked as changed.