# which doesn't have Context Variables. This implementation is somewhat
# costly for classes with slots, as it adds a __dict__ to them.
+
+import inspect
+
+
class _Immutable:
"""Immutable mixin class"""
# If we started the initialzation, establish immutability
# by removing the attribute that allows mutation
object.__delattr__(args[0], '_immutable_init')
+ nf.__signature__ = inspect.signature(f)
return nf
# with slots immutable. It's also faster.
import contextvars
+import inspect
+
_in__init__ = contextvars.ContextVar('_immutable_in__init__', default=False)
f(*args, **kwargs)
finally:
_in__init__.reset(previous)
+ nf.__signature__ = inspect.signature(f)
return nf