Enums
Enums declare a fixed set of named variants. They are compile-time constants, not objects.
Declaring an enum
enum TokenKind: IDENT NUMBER EOFVariants are implicitly ordered starting from 0. There are no explicit numeric assignments.
Using enum values
enum TokenKind: IDENT NUMBER EOF
class Token: kind: TokenKind text: str
def is_ident(kind: TokenKind) -> bool: return kind == TokenKind.IDENT
def main() -> None: kind = TokenKind.NUMBER kinds: list[TokenKind] = [TokenKind.IDENT, TokenKind.EOF] token = Token(TokenKind.IDENT, "x") names: dict[TokenKind, str] = { TokenKind.IDENT: "id", TokenKind.NUMBER: "num" } print(kind) print(kinds) print(token) print(names) print(is_ident(token.kind))Printing
Enum values print by variant name:
def main() -> None: print(TokenKind.IDENT) # IDENTModule-qualified access
When importing from another module:
from shapes import Color
def main() -> None: c = Color.RED print(c)import shapes
def main() -> None: c = shapes.Color.RED print(c)Limits
- Enum definitions are module-scope only.
- No methods on enums.
- No explicit numeric values.
- Up to 64 variants per enum.
- Enums cannot participate in general unions (only
Enum | Noneis supported).