Skip to content

Instantly share code, notes, and snippets.

@levrik
Forked from mypy-play/main.py
Created July 6, 2021 06:06
Show Gist options
  • Save levrik/3fea5f8e3bfa94c7b9835fb53133af4d to your computer and use it in GitHub Desktop.
Save levrik/3fea5f8e3bfa94c7b9835fb53133af4d to your computer and use it in GitHub Desktop.
Shared via mypy Playground
from typing import Literal, Union
from enum import Enum
class ModelType(str, Enum):
Simple1 = "simple1"
Simple2 = "simple2"
Complex1 = "complex1"
Complex2 = "complex2"
class BaseModel:
type: ModelType
class BaseSimpleModel(BaseModel):
type: Literal[ModelType.Simple1, ModelType.Simple2]
simple: str
class Simple1Model(BaseSimpleModel):
type: Literal[ModelType.Simple1]
class Simple2Model(BaseSimpleModel):
type: Literal[ModelType.Simple2]
SimpleModel = Union[Simple1Model, Simple2Model]
class BaseComplexModel(BaseModel):
type: Literal[ModelType.Complex1, ModelType.Complex2]
complex: str
class Complex1Model(BaseComplexModel):
type: Literal[ModelType.Complex1]
class Complex2Model(BaseComplexModel):
type: Literal[ModelType.Complex2]
ComplexModel = Union[Complex1Model, Complex2Model]
Model = Union[SimpleModel, ComplexModel]
model: Model = Simple1Model()
if model.type is ModelType.Simple1:
reveal_type(model)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment