可能重复:
Python中的"命名元组"是什么?
应该使用namedtuple的情况是什么?
当我查看它时,它看起来像一种让元组更像字典的方法.他们如何与字典相比?
是否只能为字典使用相同的字典类型?
我正在尝试创建NamedTuple的通用版本,如下所示:
T1 = TypeVar("T1")
T2 = TypeVar("T2")
class Group(NamedTuple, Generic[T1, T2]):
key: T1
group: List[T2]
g = Group(1, [""]) # expecting type to be Group[int, str]
Run Code Online (Sandbox Code Playgroud)
但是,出现以下错误:
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
Run Code Online (Sandbox Code Playgroud)
我不确定在这里还能做什么,或者在某种程度上这可能是键入机制中的错误。
我有一些 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 方式是什么?