'Set up this XBlock to act as an XModule instead of an XModuleDescriptor.
Arguments:
xmodule_runtime (:class:`ModuleSystem\'): the runtime to use when accessing student facing methods
user_id: The user_id to set in scope_ids
wrappers: These are a list functions that put a wrapper, such as
LmsFieldData or OverrideFieldData, around the field_data.
Note that the functions will be applied in the order in
which they\'re listed. So [f1, f2] -> f2(f1(field_data))'

def bind_for_student(self, xmodule_runtime, user_id, wrappers=None):

    if ((self.scope_ids.user_id is not None) and (user_id == self.scope_ids.user_id)):
        if getattr(xmodule_runtime, 'position', None):
            self.position = xmodule_runtime.position
        return
    self.save()
    self.scope_ids = self.scope_ids._replace(user_id=user_id)
    self.clear_child_cache()
    for field in self.fields.values():
        if (field.scope in (Scope.parent, Scope.children)):
            continue
        if (field.scope.user == UserScope.ONE):
            field._del_cached_value(self)
            if (field in self._dirty_fields):
                del self._dirty_fields[field]
    self.xmodule_runtime = xmodule_runtime
    if (wrappers is None):
        wrappers = []
    wrapped_field_data = self._unwrapped_field_data
    for wrapper in wrappers:
        wrapped_field_data = wrapper(wrapped_field_data)
    self._field_data = wrapped_field_data
