gpt4 book ai didi

Python 类型提示枚举成员值

转载 作者:行者123 更新时间:2023-12-03 08:13:03 25 4
gpt4 key购买 nike

我试图限制枚举仅包含一种类型的所有成员值。比如我想要

class MyTypedEnum(Enum):
MEMBER_1= 1
MEMBER_2= 2
...

成为其成员值中仅包含 int 的枚举。

因此,当我将 MyTypedEnum.MEMBER_X.value 写入 IDE 时,它会识别出该类型确实是 int

编辑:这显然是一个使用 int 的简单示例,但我想在其位置使用任何类型。

最佳答案

据我所知,Python typing spec没有解决这个问题。

这实际上取决于您的 IDE 和静态分析工具。如果我这样做:

from enum import Enum

class Foo(Enum):
bar: int = 1
baz: int = 2

reveal_type(Foo.bar.value)
value: int = Foo.bar.value

然后 mypy 很好地理解了它,并给出了:

(py39) Juans-MacBook-Pro:~ juan$ mypy test.py
test.py:6: note: Revealed type is "builtins.int"

但是,pyright 给了我一个错误:

(py39) Juans-MacBook-Pro:~ juan$ pyright test.py
Found 1 source file
/Users/juan/Coursera/test.py
/Users/juan/Coursera/test.py:4:16 - error: Expression of type "Literal[1]" cannot be assigned to declared type "Literal[Foo.bar]"
  "Literal[1]" cannot be assigned to type "Literal[Foo.bar]" (reportGeneralTypeIssues)
/Users/juan/Coursera/test.py:5:16 - error: Expression of type "Literal[2]" cannot be assigned to declared type "Literal[Foo.baz]"
  "Literal[2]" cannot be assigned to type "Literal[Foo.baz]" (reportGeneralTypeIssues)
/Users/juan/Coursera/test.py:6:13 - info: Type of "Foo.bar.value" is "int"
2 errors, 0 warnings, 1 info
Completed in 0.819sec

我想 mypy 是特殊大小写的枚举。

我找到了this semi-related issue in the pyright github .

here is a related PR from mypy他们为无类型枚举值添加了推理功能。

关于Python 类型提示枚举成员值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70310588/

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