diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2020-04-04 18:31:30 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-04 18:31:30 (GMT) |
commit | a94e6272f16381349dbed74cdb738ec8ae23b4fe (patch) | |
tree | 88b84259573c0752ded1fce71c76094f8cb7989a | |
parent | 1ae6445391cc3519733df69a4448059d6eff3c6f (diff) | |
download | cpython-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.py | 7 | ||||
-rw-r--r-- | Lib/typing.py | 3 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-04-04-17-49-39.bpo-36517.Ilj1IJ.rst | 2 |
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. |