Chr*_*uer 4 python python-dataclasses python-typing
这是 Python 3.7
我有一个这样的数据类:
@dataclass
class Action:
action: str
Run Code Online (Sandbox Code Playgroud)
但 action 实际上仅限于值“bla”和“foo”。有没有一种明智的方式来表达这一点?
typing.Literal像这样使用:
@dataclass
class Action:
action: Literal["bla", "foo"]
Run Code Online (Sandbox Code Playgroud)
问题是它是 Python 3.8 中的新功能。如果你想要Literal在早期的 Python 版本中,你需要安装typing-extensions模块。因此,Python 3.7 的完整解决方案如下所示:
from dataclasses import dataclass
from typing_extensions import Literal
@dataclass
class Action:
action: Literal["bla", "foo"]
Run Code Online (Sandbox Code Playgroud)
你可以使用一个Enum:
from dataclasses import dataclass
from enum import Enum
class ActionType(Enum):
BLA = 'bla'
FOO = 'foo'
@dataclass
class Action:
action: ActionType
>>> a = Action(action=ActionType.FOO)
>>> a.action.name
'FOO'
>>> a.action.value
'foo'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
336 次 |
| 最近记录: |