import typing import unittest class TestTypingNamedTuple(unittest.TestCase): def setUp(self): class A(typing.NamedTuple): value:bool = True class B(A): value:bool = False class C(A, typing.NamedTuple): """ The same if definition will be class C(A, metaclass=typing.NamedTupleMeta) """ value:bool = False self.__dict__.update(locals()) def test_ok(self): # used default values self.assertTrue(self.A().value) self.assertFalse(self.B().value) self.assertFalse(self.C().value) self.assertFalse(self.A(value=False).value) def test_b_fail(self): self.assertFalse(self.B(value=False).value) self.assertTrue(self.B(value=True).value) # fail here def test_c_ok(self): self.assertFalse(self.C(value=False).value) self.assertTrue(self.C(value=True).value) def test_eq_b_fail(self): for _class in (self.A, self.B, self.C): instance = _class() assert instance[0] == instance.value, _class # fail here with B if __name__ == '__main__': unittest.main()