首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >依赖于其他字段类型的字段类型

依赖于其他字段类型的字段类型
EN

Stack Overflow用户
提问于 2021-07-12 11:14:15
回答 1查看 190关注 0票数 3

是否有可能创建一个类似于

代码语言:javascript
复制
from typing import Union, Literal

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

如果quxLiteral["str"],那么barstr类型,如果quxLiteral["int"],那么barint类型吗?有可能给它加注释吗?

我知道typing.overload,但我不认为它与本例相关

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-12 11:43:00

Python的typing系统通常不支持依赖类型。然而,也有可能模仿一些具体的案例。

对于较低数量的依赖类型,可以枚举这些情况。这需要使单个类型成为通用类型:

代码语言:javascript
复制
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,字面“str”],GenericFoo[int,文字“int”] f: Foo f=GenericFoo(“1”,"str") f= GenericFoo(2,"int") f=GenericFoo(“3”,"int")

  • 通过实例化:overload(GenericBar,Qux):bar: bar: Qux @重载def __init__(self,bar: str,qux:文本“str”):pass @overload def __init__(self,bar: int,qux:字面“int”):pass def __init__(self,Bar : Bar,qux: Qux):# type:忽略传递
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68346391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档