Fla*_*nix 2 python types pyright pylance
我有一些 Python 3.7 代码,我正在尝试向其中添加类型。我想添加的类型之一实际上是Union几种可能的字符串之一:
from typing import Union, Optional, Dict
PossibleKey = Union["fruits", "cars", "vegetables"]
PossibleType = Dict[PossibleKey, str]
def some_function(target: Optional[PossibleType] = None):
if target:
all_fruits = target["fruits"]
print(f"I have {all_fruits}")
Run Code Online (Sandbox Code Playgroud)
这里的问题是 Pyright 抱怨的PossibleKey。它说:
“水果没有定义”
我想让 Pyright/Pylance 工作。
我已经from enum import Enum从另一个 SO 答案中检查了该模块,但是如果我尝试这样做,我最终会遇到更多问题,因为我实际上处理的是 aDict[str, Any]而不是Enum.
表示我的类型的正确 Pythonic 方式是什么?
"fruits"不是类型(提示),而是Literal["fruits"]。
from typing import Union, Literal
PossibleKey = Union[Literal["fruits"], Literal["cars"], Literal["vegetables"]]
Run Code Online (Sandbox Code Playgroud)
或者更短的版本,
PossibleKey = Literal["fruits", "cars", "vegetables"]
Run Code Online (Sandbox Code Playgroud)
或者,正如您所提到的,定义一个Enum由三个值填充的值。
from enum import Enum
class Key(Enum):
Fruits = "fruits"
Cars = "cars"
Vegetables = "vegetables"
def some_function(target: Optional[PossibleType] = None):
if target:
all_fruits = target[Key.Fruits]
print(f"I have {all_fruits}")
Run Code Online (Sandbox Code Playgroud)
(但是,仅仅因为target不是None并不一定意味着它实际上具有 "fruits"作为键,只是没有Key.Fruits除、Key.Cars或 之外的键Key.Vegetables。)
| 归档时间: |
|
| 查看次数: |
1095 次 |
| 最近记录: |