summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_typing.py
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2017-01-18 16:03:50 (GMT)
committerGuido van Rossum <guido@python.org>2017-01-18 16:03:50 (GMT)
commit3c268be885d62b1b5ac572340641024af2c02ce4 (patch)
treed7773d658d2c6748a9604dd9c72fa0eadc1188dc /Lib/test/test_typing.py
parent37f183d43d9858c428997430042bdc16ce353850 (diff)
downloadcpython-3c268be885d62b1b5ac572340641024af2c02ce4.zip
cpython-3c268be885d62b1b5ac572340641024af2c02ce4.tar.gz
cpython-3c268be885d62b1b5ac572340641024af2c02ce4.tar.bz2
Issue #28556: allow default values in class form of NamedTuple -- Jelle Zijlstra
Diffstat (limited to 'Lib/test/test_typing.py')
-rw-r--r--Lib/test/test_typing.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 73bcda1..44712b6 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -1400,6 +1400,10 @@ class G(Generic[T]):
class CoolEmployee(NamedTuple):
name: str
cool: int
+
+class CoolEmployeeWithDefault(NamedTuple):
+ name: str
+ cool: int = 0
"""
if PY36:
@@ -1960,6 +1964,28 @@ class NamedTupleTests(BaseTestCase):
self.assertIs(CoolEmployee._field_types, CoolEmployee.__annotations__)
@skipUnless(PY36, 'Python 3.6 required')
+ def test_annotation_usage_with_default(self):
+ jelle = CoolEmployeeWithDefault('Jelle')
+ self.assertIsInstance(jelle, CoolEmployeeWithDefault)
+ self.assertIsInstance(jelle, tuple)
+ self.assertEqual(jelle.name, 'Jelle')
+ self.assertEqual(jelle.cool, 0)
+ cooler_employee = CoolEmployeeWithDefault('Sjoerd', 1)
+ self.assertEqual(cooler_employee.cool, 1)
+
+ self.assertEqual(CoolEmployeeWithDefault.__name__, 'CoolEmployeeWithDefault')
+ self.assertEqual(CoolEmployeeWithDefault._fields, ('name', 'cool'))
+ self.assertEqual(CoolEmployeeWithDefault._field_types, dict(name=str, cool=int))
+ self.assertEqual(CoolEmployeeWithDefault._field_defaults, dict(cool=0))
+
+ with self.assertRaises(TypeError):
+ exec("""
+class NonDefaultAfterDefault(NamedTuple):
+ x: int = 3
+ y: int
+""")
+
+ @skipUnless(PY36, 'Python 3.6 required')
def test_namedtuple_keyword_usage(self):
LocalEmployee = NamedTuple("LocalEmployee", name=str, age=int)
nick = LocalEmployee('Nick', 25)