bpo-43102: Set namedtuple __new__'s internal builtins to a dict. (GH-24439) (GH-24452)

This commit is contained in:
Miss Islington (bot) 2021-02-04 16:12:34 -08:00 committed by GitHub
parent 48d16b4b0f
commit 29584aa6ac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 8 additions and 1 deletions

View file

@ -424,7 +424,7 @@ def namedtuple(typename, field_names, *, rename=False, defaults=None, module=Non
namespace = {
'_tuple_new': tuple_new,
'__builtins__': None,
'__builtins__': {},
'__name__': f'namedtuple_{typename}',
}
code = f'lambda _cls, {arg_list}: _tuple_new(_cls, ({arg_list}))'

View file

@ -680,6 +680,11 @@ class TestNamedTuple(unittest.TestCase):
self.assertEqual(np.x, 1)
self.assertEqual(np.y, 2)
def test_new_builtins_issue_43102(self):
self.assertEqual(
namedtuple('C', ()).__new__.__globals__['__builtins__'],
{})
################################################################################
### Abstract Base Classes

View file

@ -0,0 +1,2 @@
The namedtuple __new__ method had its __builtins__ set to None instead
of an actual dictionary. This created problems for introspection tools.