summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2020-04-04 18:31:30 (GMT)
committerGitHub <noreply@github.com>2020-04-04 18:31:30 (GMT)
commita94e6272f16381349dbed74cdb738ec8ae23b4fe (patch)
tree88b84259573c0752ded1fce71c76094f8cb7989a
parent1ae6445391cc3519733df69a4448059d6eff3c6f (diff)
downloadcpython-a94e6272f16381349dbed74cdb738ec8ae23b4fe.zip
cpython-a94e6272f16381349dbed74cdb738ec8ae23b4fe.tar.gz
cpython-a94e6272f16381349dbed74cdb738ec8ae23b4fe.tar.bz2
bpo-36517: Raise error on multiple inheritance with NamedTuple (GH-19363)
-rw-r--r--Lib/test/test_typing.py7
-rw-r--r--Lib/typing.py3
-rw-r--r--Misc/NEWS.d/next/Library/2020-04-04-17-49-39.bpo-36517.Ilj1IJ.rst2
3 files changed, 12 insertions, 0 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 8d6262b..3a0edb9 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -3626,6 +3626,13 @@ class XMethBad2(NamedTuple):
return 'no chance for this as well'
""")
+ def test_multiple_inheritance(self):
+ class A:
+ pass
+ with self.assertRaises(TypeError):
+ class X(NamedTuple, A):
+ x: int
+
def test_namedtuple_keyword_usage(self):
LocalEmployee = NamedTuple("LocalEmployee", name=str, age=int)
nick = LocalEmployee('Nick', 25)
diff --git a/Lib/typing.py b/Lib/typing.py
index 5351883..99355d0 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -1728,6 +1728,9 @@ class NamedTupleMeta(type):
def __new__(cls, typename, bases, ns):
if ns.get('_root', False):
return super().__new__(cls, typename, bases, ns)
+ if len(bases) > 1:
+ raise TypeError("Multiple inheritance with NamedTuple is not supported")
+ assert bases[0] is NamedTuple
types = ns.get('__annotations__', {})
nm_tpl = _make_nmtuple(typename, types.items())
defaults = []
diff --git a/Misc/NEWS.d/next/Library/2020-04-04-17-49-39.bpo-36517.Ilj1IJ.rst b/Misc/NEWS.d/next/Library/2020-04-04-17-49-39.bpo-36517.Ilj1IJ.rst
new file mode 100644
index 0000000..cd5c0d7
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-04-04-17-49-39.bpo-36517.Ilj1IJ.rst
@@ -0,0 +1,2 @@
+Multiple inheritance with :class:`typing.NamedTuple` now raises an error
+instead of silently ignoring other types.