gpt4 book ai didi

python - 字段类型取决于其他字段的类型

转载 作者:行者123 更新时间:2023-12-05 01:58:45 25 4
gpt4 key购买 nike

是否可以创建一个类似的类

from typing import Union, Literal

class Foo:
bar: Union[str, int]
qux: Literal["str", "int"]

这样,如果 quxLiteral["str"],则 barstr 类型,如果 quxLiteral["int"],那么 barint 类型?是否可以对其进行注释?

我知道 typing.overload,但我认为它与此示例无关

最佳答案

Python 的typing 系统通常不支持依赖类型。但是,可以模拟某些特定情况。

对于较少数量的依赖类型,可以枚举案例。这需要使各个类型通用:

from typing import Union, Literal, Generic, TypeVar

Bar = TypeVar("Bar", str, int)
Qux = TypeVar("Qux", Literal["str"], Literal["int"])


class GenericFoo(Generic[Bar, Qux]):
bar: Bar
qux: Qux

# not always needed – used to infer types from instantiation
def __init__(self, bar: Bar, qux: Qux): pass

然后可以定义依赖关系

  • 作为案例的 Union:
    Foo = Union[GenericFoo[str, Literal["str"]], GenericFoo[int, Literal["int"]]]

    f: Foo
    f = GenericFoo("one", "str")
    f = GenericFoo(2, "int")
    f = GenericFoo("three", "int")
  • 通过重载实例化:
    class GenericFoo(Generic[Bar, Qux]):
    bar: Bar
    qux: Qux

    @overload
    def __init__(self, bar: str, qux: Literal["str"]):
    pass

    @overload
    def __init__(self, bar: int, qux: Literal["int"]):
    pass

    def __init__(self, bar: Bar, qux: Qux): # type: ignore
    pass

关于python - 字段类型取决于其他字段的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68346391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com