Fix Enum type definition (#8624)

Using the : syntax leads to non member attributes.

> If an attribute is defined in the class body with a type annotation
> but with no assigned value, a type checker should assume this is a non-member attribute

```
class Pet(Enum):
    genus: str  # Non-member attribute
    species: str  # Non-member attribute

    CAT = 1  # Member attribute
    DOG = 2  # Member attribute
```

https://typing.python.org/en/latest/spec/enums.html#defining-members
This commit is contained in:
Felix
2025-07-16 21:22:45 +02:00
committed by GitHub
parent 07c2eb5fe7
commit 1047d7ec13
4 changed files with 16 additions and 11 deletions

View File

@@ -549,6 +549,8 @@ class PythonStubGenerator {
stub << "class " << namer_.Type(*enum_def);
imports->Export(ModuleFor(enum_def), namer_.Type(*enum_def));
imports->Import("typing", "cast");
if (version_.major == 3){
imports->Import("enum", "IntEnum");
stub << "(IntEnum)";
@@ -559,8 +561,8 @@ class PythonStubGenerator {
stub << ":\n";
for (const EnumVal *val : enum_def->Vals()) {
stub << " " << namer_.Variant(*val) << ": "
<< ScalarType(enum_def->underlying_type.base_type) << "\n";
stub << " " << namer_.Variant(*val) << " = cast("
<< ScalarType(enum_def->underlying_type.base_type) << ", ...)\n";
}
if (parser_.opts.generate_object_based_api & enum_def->is_union) {