diff options
Diffstat (limited to 'Lib/dataclasses.py')
| -rw-r--r-- | Lib/dataclasses.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 8ccc4c88ae..8c197fe739 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -240,6 +240,20 @@ class Field: f'metadata={self.metadata}' ')') + # This is used to support the PEP 487 __set_name__ protocol in the + # case where we're using a field that contains a descriptor as a + # defaul value. For details on __set_name__, see + # https://www.python.org/dev/peps/pep-0487/#implementation-details. + # Note that in _process_class, this Field object is overwritten with + # the default value, so the end result is a descriptor that had + # __set_name__ called on it at the right time. + def __set_name__(self, owner, name): + func = getattr(self.default, '__set_name__', None) + if func: + # There is a __set_name__ method on the descriptor, + # call it. + func(owner, name) + class _DataclassParams: __slots__ = ('init', |
