diff options
| author | Guido van Rossum <guido@python.org> | 2017-01-18 16:03:54 (GMT) |
|---|---|---|
| committer | Guido van Rossum <guido@python.org> | 2017-01-18 16:03:54 (GMT) |
| commit | e69f0e6111facf751b75f6c73bb6dee2207af366 (patch) | |
| tree | c0b1ac2c45e7ebdaec6d8c6542df1695575d9771 /Lib/test | |
| parent | 0a2e46835dbadc626a996c2d937f5b45123ca6de (diff) | |
| parent | 49f08a2c26be96edd327a39d6613c22bb919c310 (diff) | |
| download | cpython-e69f0e6111facf751b75f6c73bb6dee2207af366.zip cpython-e69f0e6111facf751b75f6c73bb6dee2207af366.tar.gz cpython-e69f0e6111facf751b75f6c73bb6dee2207af366.tar.bz2 | |
Issue #28556: allow default values in class form of NamedTuple -- Jelle Zijlstra (3.6->3.7)
Diffstat (limited to 'Lib/test')
| -rw-r--r-- | Lib/test/test_typing.py | 26 |
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) |
