Skip to content

Commit a94e627

Browse files
bpo-36517: Raise error on multiple inheritance with NamedTuple (GH-19363)
1 parent 1ae6445 commit a94e627

File tree

3 files changed

+12
-0
lines changed

3 files changed

+12
-0
lines changed

Lib/test/test_typing.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3626,6 +3626,13 @@ def _source(self):
36263626
return 'no chance for this as well'
36273627
""")
36283628

3629+
def test_multiple_inheritance(self):
3630+
class A:
3631+
pass
3632+
with self.assertRaises(TypeError):
3633+
class X(NamedTuple, A):
3634+
x: int
3635+
36293636
def test_namedtuple_keyword_usage(self):
36303637
LocalEmployee = NamedTuple("LocalEmployee", name=str, age=int)
36313638
nick = LocalEmployee('Nick', 25)

Lib/typing.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1728,6 +1728,9 @@ class NamedTupleMeta(type):
17281728
def __new__(cls, typename, bases, ns):
17291729
if ns.get('_root', False):
17301730
return super().__new__(cls, typename, bases, ns)
1731+
if len(bases) > 1:
1732+
raise TypeError("Multiple inheritance with NamedTuple is not supported")
1733+
assert bases[0] is NamedTuple
17311734
types = ns.get('__annotations__', {})
17321735
nm_tpl = _make_nmtuple(typename, types.items())
17331736
defaults = []
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Multiple inheritance with :class:`typing.NamedTuple` now raises an error
2+
instead of silently ignoring other types.

0 commit comments

Comments
 (0)