diff --git a/pydantic/_internal/_generate_schema.py b/pydantic/_internal/_generate_schema.py index 8f2f19391b..63ef885919 100644 --- a/pydantic/_internal/_generate_schema.py +++ b/pydantic/_internal/_generate_schema.py @@ -1130,7 +1130,9 @@ def _namedtuple_schema(self, namedtuple_cls: Any, origin: Any) -> core_schema.Co arguments_schema = core_schema.arguments_schema( [ - self._generate_parameter_schema(field_name, annotation) + self._generate_parameter_schema( + field_name, annotation, default=namedtuple_cls._field_defaults.get(field_name, Parameter.empty) + ) for field_name, annotation in annotations.items() ], metadata=build_metadata_dict(js_prefer_positional_arguments=True), diff --git a/tests/test_types_namedtuple.py b/tests/test_types_namedtuple.py index 39a350f468..92302f4bca 100644 --- a/tests/test_types_namedtuple.py +++ b/tests/test_types_namedtuple.py @@ -199,3 +199,12 @@ class MyNamedTuple(TypingExtensionsNamedTuple, Generic[T]): 'type': 'int_parsing', } ] + + +def test_namedtuple_defaults(): + class NT(NamedTuple): + x: int + y: int = 33 + + assert TypeAdapter(NT).validate_python([1]) == (1, 33) + assert TypeAdapter(NT).validate_python({'x': 22}) == (22, 33)