def __setattr__(cls, name, value):
    "Handle the special treatment required for variables and parameters.\n\n        A variable's default value can be updated when accessed as a regular\n        class attribute. This behavior does not apply when the assigned value\n        is a descriptor object. In that case, the task of setting the value is\n        delegated to the base :func:`__setattr__` (this is to comply with\n        standard Python behavior). However, since the variables are already\n        descriptors which are injected during class instantiation, we disallow\n        any attempt to override this descriptor (since it would be silently\n        re-overridden in any case).\n\n        Altering the value of a parameter when accessed as a class attribute\n        is not allowed. This would break the parameter space internals.\n        "
    if cls.setvar(name, value):
        return
    try:
        param_space = super().__getattribute__('_rfm_param_space')
        if (name in param_space.params):
            raise ReframeSyntaxError(f'cannot override parameter {name!r}')
    except AttributeError:
        'Catch early access attempt to the parameter space.'
    super().__setattr__(name, value)
Handle the special treatment required for variables and parameters.

A variable's default value can be updated when accessed as a regular
class attribute. This behavior does not apply when the assigned value
is a descriptor object. In that case, the task of setting the value is
delegated to the base :func:`__setattr__` (this is to comply with
standard Python behavior). However, since the variables are already
descriptors which are injected during class instantiation, we disallow
any attempt to override this descriptor (since it would be silently
re-overridden in any case).

Altering the value of a parameter when accessed as a class attribute
is not allowed. This would break the parameter space internals.
def __setattr__(cls, name, value):
    "Handle the special treatment required for variables and parameters.\n\n        A variable's default value can be updated when accessed as a regular\n        class attribute. This behavior does not apply when the assigned value\n        is a descriptor object. In that case, the task of setting the value is\n        delegated to the base :func:`__setattr__` (this is to comply with\n        standard Python behavior). However, since the variables are already\n        descriptors which are injected during class instantiation, we disallow\n        any attempt to override this descriptor (since it would be silently\n        re-overridden in any case).\n\n        Altering the value of a parameter when accessed as a class attribute\n        is not allowed. This would break the parameter space internals.\n        "
    if cls.setvar(name, value):
        return
    try:
        param_space = super().__getattribute__('_rfm_param_space')
        if (name in param_space.params):
            raise ReframeSyntaxError(f'cannot override parameter {name!r}')
    except AttributeError:
        'Catch early access attempt to the parameter space.'
    super().__setattr__(name, value)