[Python] How to bypass writing @overload in Python typing

Discussão em 'Python' iniciado por Stack, Janeiro 18, 2025.

  1. Stack

    Stack Membro Participativo

    I have a function bus, which has an input format defined by @overload.

    Additionally, there are two other functions, apple and orange, each with their own inputs and specific arguments for bus.

    How can I obtain an annotation similar to what @overload provides without having to manually write the @overload for apple and orange?

    from typing import TypedDict, Union, overload, Unpack

    class DateDict(TypedDict):
    year: int
    month: int
    day: int

    class RangeDateDict(TypedDict):
    start_year: int
    start_month: int
    start_day: int
    end_year: int
    end_month: int
    end_day: int


    @overload
    def bus(**params: Unpack[DateDict]) -> None: ...
    @overload
    def bus(**params: Unpack[RangeDateDict]) -> None: ...

    def bus(**params: Union[DateDict, RangeDateDict]) -> None:
    print(f"bus called with: {params}")


    @overload
    def apple(name: str, **params: Unpack[DateDict]) -> str: ...
    @overload
    def apple(name: str, **params: Unpack[RangeDateDict]) -> str: ...

    def apple(name: str, **params: Union[DateDict, RangeDateDict]) -> str:
    # Do something
    bus(params)
    return name


    @overload
    def orange(name: str, **params: Union[DateDict]) -> str: ...
    @overload
    def orange(name: str, **params: Union[RangeDateDict]) -> str: ...

    def orange(name: str, params: Union[DateDict, RangeDateDict]) -> str:
    # Do something
    bus(params)
    return name

    if __name__ == "__main__":
    pass

    Continue reading...

Compartilhe esta Página