diff --git a/codegen/core/src/main/java/software/amazon/smithy/python/codegen/generators/StructureGenerator.java b/codegen/core/src/main/java/software/amazon/smithy/python/codegen/generators/StructureGenerator.java index 55d4daf67..71e1edbd7 100644 --- a/codegen/core/src/main/java/software/amazon/smithy/python/codegen/generators/StructureGenerator.java +++ b/codegen/core/src/main/java/software/amazon/smithy/python/codegen/generators/StructureGenerator.java @@ -207,6 +207,14 @@ private void writeProperties() { if (member.hasTrait(DefaultTrait.class)) { defaultValue = getDefaultValue(writer, member); + // A `@default: null` member is nullable and resolves to None, so + // it needs `| None` like a member with no default. Documents are + // excluded: a null document default is a non-None Document(None), + // built via default_factory below. + if (!target.isDocumentShape() + && member.expectTrait(DefaultTrait.class).toNode().isNullNode()) { + writer.putContext("nullable", true); + } if (target.isDocumentShape() || defaultValue.startsWith("list[") || defaultValue.startsWith("dict[")) { writer.addStdlibImport("dataclasses", "field"); defaultKey = "default_factory";