相关疑难解决方法(0)

何时以及为什么我应该使用namedtuple而不是字典?

可能重复:
Python中的"命名元组"是什么?

应该使用namedtuple的情况是什么?

当我查看它时,它看起来像一种让元组更像字典的方法.他们如何与字典相比?

是否只能为字典使用相同的字典类型?

python

170
推荐指数
2
解决办法
7万
查看次数

Python 3.6中的通用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 generics typing python-3.6

4
推荐指数
1
解决办法
943
查看次数

创建一个字符串并集,用作可能的字典键

我有一些 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 方式是什么?

python types pyright pylance

2
推荐指数
1
解决办法
1095
查看次数

标签 统计

python ×3

generics ×1

pylance ×1

pyright ×1

python-3.6 ×1

types ×1

typing ×1