def __call__(cls, *args, **kwargs):
    'Inject parameter and variable spaces during object construction.\n\n        When a class is instantiated, this method intercepts the arguments\n        associated to the parameter and variable spaces. This prevents both\n        :func:`__new__` and :func:`__init__` methods from ever seing these\n        arguments.\n\n        The parameter and variable spaces are injected into the object after\n        construction and before initialization.\n        '
    _rfm_use_params = kwargs.pop('_rfm_use_params', False)
    obj = cls.__new__(cls, *args, **kwargs)
    cls._rfm_var_space.inject(obj, cls)
    cls._rfm_param_space.inject(obj, cls, _rfm_use_params)
    obj.__init__(*args, **kwargs)
    return obj
Inject parameter and variable spaces during object construction.

When a class is instantiated, this method intercepts the arguments
associated to the parameter and variable spaces. This prevents both
:func:`__new__` and :func:`__init__` methods from ever seing these
arguments.

The parameter and variable spaces are injected into the object after
construction and before initialization.
def __call__(cls, *args, **kwargs):
    'Inject parameter and variable spaces during object construction.\n\n        When a class is instantiated, this method intercepts the arguments\n        associated to the parameter and variable spaces. This prevents both\n        :func:`__new__` and :func:`__init__` methods from ever seing these\n        arguments.\n\n        The parameter and variable spaces are injected into the object after\n        construction and before initialization.\n        '
    _rfm_use_params = kwargs.pop('_rfm_use_params', False)
    obj = cls.__new__(cls, *args, **kwargs)
    cls._rfm_var_space.inject(obj, cls)
    cls._rfm_param_space.inject(obj, cls, _rfm_use_params)
    obj.__init__(*args, **kwargs)
    return obj