code: 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)