joh*_*hng 11 python dictionary typing python-3.x
如果我在字典中有一个带有无效标识符的键,例如A(2). 如何TypedDict使用此字段创建一个?
例如
from typing import TypedDict
class RandomAlphabet(TypedDict):
A(2): str
Run Code Online (Sandbox Code Playgroud)
不是有效的 Python 代码,导致错误:
from typing import TypedDict
class RandomAlphabet(TypedDict):
A(2): str
Run Code Online (Sandbox Code Playgroud)
保留关键字也有同样的问题:
class RandomAlphabet(TypedDict):
return: str
Run Code Online (Sandbox Code Playgroud)
抛出:
SyntaxError: illegal target for annotation
Run Code Online (Sandbox Code Playgroud)
Geo*_*rgy 14
根据PEP 589,您可以使用替代语法来创建TypedDict如下:
Movie = TypedDict('Movie', {'name': str, 'year': int})
所以,在你的情况下,你可以写:
from typing import TypedDict
RandomAlphabet = TypedDict('RandomAlphabet', {'A(2)': str})
Run Code Online (Sandbox Code Playgroud)
或者对于第二个例子:
RandomAlphabet = TypedDict('RandomAlphabet', {'return': str})
Run Code Online (Sandbox Code Playgroud)
不过,PEP 589警告说:
但是,此语法不支持继承,并且无法在单一类型中同时具有必需字段和非必需字段。这样做的动机是保持向后兼容的语法尽可能简单,同时涵盖最常见的用例。
这相当混乱,但如果您需要继承,它就可以工作。
class RandomAlphabet(
TypedDict(
"RandomAlphabet",
{"A(2)": str, "return": str},
),
SomeInheritedTypedDict,
):
pass
Run Code Online (Sandbox Code Playgroud)
您还可以替换pass为不使用无效标识符或保留关键字(如果有)的其他正常属性。
| 归档时间: |
|
| 查看次数: |
1402 次 |
| 最近记录: |