bpo-43102: Set namedtuple __new__'s internal builtins to a dict. (GH-24439)
This commit is contained in:
parent
196d4deaf4
commit
b6d68aa08b
@ -407,7 +407,7 @@ def namedtuple(typename, field_names, *, rename=False, defaults=None, module=Non
|
|||||||
|
|
||||||
namespace = {
|
namespace = {
|
||||||
'_tuple_new': tuple_new,
|
'_tuple_new': tuple_new,
|
||||||
'__builtins__': None,
|
'__builtins__': {},
|
||||||
'__name__': f'namedtuple_{typename}',
|
'__name__': f'namedtuple_{typename}',
|
||||||
}
|
}
|
||||||
code = f'lambda _cls, {arg_list}: _tuple_new(_cls, ({arg_list}))'
|
code = f'lambda _cls, {arg_list}: _tuple_new(_cls, ({arg_list}))'
|
||||||
|
@ -681,6 +681,11 @@ class TestNamedTuple(unittest.TestCase):
|
|||||||
self.assertEqual(np.x, 1)
|
self.assertEqual(np.x, 1)
|
||||||
self.assertEqual(np.y, 2)
|
self.assertEqual(np.y, 2)
|
||||||
|
|
||||||
|
def test_new_builtins_issue_43102(self):
|
||||||
|
self.assertEqual(
|
||||||
|
namedtuple('C', ()).__new__.__globals__['__builtins__'],
|
||||||
|
{})
|
||||||
|
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
### Abstract Base Classes
|
### Abstract Base Classes
|
||||||
|
@ -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.
|
Loading…
x
Reference in New Issue
Block a user