bpo-34213: Allow dataclasses to work with a field named 'object'. (GH-8452)

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 types
 import inspect
 import keyword
+import builtins
 
 __all__ = ['dataclass',
            'field',
@@ -343,6 +344,11 @@
     # 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 @@
     # 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}'