def _imm_trans_setattr(self, name, value):
    '''
    An immutable's transient setattr allows params to be set, and runs checks as they are.
    '''
    params = _imm_param_data(self)
    dd = object.__getattribute__(self, '__dict__')
    if name in params:
        (_, tx_fn, arg_lists, check_fns, deps) = params[name]
        value = value if tx_fn is None else tx_fn(value)
        old_deps = {}
        orig_value = dd[name]
        for dep in deps:
            if dep in dd:
                old_deps[dep] = dd[dep]
                del dd[dep]
        try:
            dd[name] = value
            for (args, check_fn) in zip(arg_lists, check_fns):
                if not check_fn(*[getattr(self, arg) for arg in args]):
                    raise RuntimeError(
                        ('Changing value of immutable attribute \'%s\'' +
                         ' caused validation failure: %s') % (name, (args, check_fn)))
            old_deps = None
        finally:
            if old_deps:
                for (dep,val) in six.iteritems(old_deps):
                    dd[dep] = val
                dd[name] = orig_value
    else:
        raise TypeError(
            'Attempt to change non-parameter member \'%s\' of transient immutable' % name)