summaryrefslogtreecommitdiffstats
path: root/Lib/dataclasses.py
diff options
context:
space:
mode:
authorVadim Pushtaev <pushtaev.vm@gmail.com>2018-08-12 11:46:05 (GMT)
committerEric V. Smith <ericvsmith@users.noreply.github.com>2018-08-12 11:46:05 (GMT)
commit4d12e4dc28b7c782c368bae2e8fd3815167ed37d (patch)
tree27d658c85e655c7a59a2de0d382d6e9d58a04365 /Lib/dataclasses.py
parent65b5ef02ec1f44e3a19b689a1ecf73d01c82161b (diff)
downloadcpython-4d12e4dc28b7c782c368bae2e8fd3815167ed37d.zip
cpython-4d12e4dc28b7c782c368bae2e8fd3815167ed37d.tar.gz
cpython-4d12e4dc28b7c782c368bae2e8fd3815167ed37d.tar.bz2
bpo-34213: Allow dataclasses to work with a field named 'object'. (GH-8452)
Diffstat (limited to 'Lib/dataclasses.py')
-rw-r--r--Lib/dataclasses.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py
index e00a125..a43d076 100644
--- a/Lib/dataclasses.py
+++ b/Lib/dataclasses.py
@@ -4,6 +4,7 @@ import copy
import types
import inspect
import keyword
+import builtins
__all__ = ['dataclass',
'field',
@@ -343,6 +344,11 @@ def _create_fn(name, args, body, *, globals=None, locals=None,
# worries about external callers.
if locals is None:
locals = {}
+ # __builtins__ may be the "builtins" module or
+ # the value of its "__dict__",
+ # so make sure "__builtins__" is the module.
+ if globals is not None and '__builtins__' not in globals:
+ globals['__builtins__'] = builtins
return_annotation = ''
if return_type is not MISSING:
locals['_return_type'] = return_type
@@ -365,7 +371,7 @@ def _field_assign(frozen, name, value, self_name):
# self_name is what "self" is called in this function: don't
# hard-code "self", since that might be a field name.
if frozen:
- return f'object.__setattr__({self_name},{name!r},{value})'
+ return f'__builtins__.object.__setattr__({self_name},{name!r},{value})'
return f'{self_name}.{name}={value}'