gpt4 book ai didi

python - 键入 : list of A and subclass of A

转载 作者:行者123 更新时间:2023-12-04 09:42:35 28 4
gpt4 key购买 nike

class A:
pass

class B(A):
pass

ListOfA = List[A]

list_of_a : ListOfA = [A(), A()]

for e in [B()] + list_of_a:
pass

我得到:
Expected type 'List[B]' (matched generic type 'List[_T]'), got 'List[A]' instead

我想要那个 e列表中的每个元素都被视为 A 的一个实例, 自 BA 的子类.在python中执行此操作的正确方法是什么?

该代码有效,但 Pycharm 会发出有关错误键入的警告。

最佳答案

这是类型一致性检查的一个已知陷阱,它与 variance of generic types 有关。 .问题是List被认为是不变的泛型类型,这意味着 List[B]不会自动被视为 List[A] 的子类型(原因是您不能将 A 的实例添加到 List[B] ,因此它们不是真正兼容的类型)。在 Invariance vs covariance有一个这个问题的例子以及解决它的不同方法。例如,您可以为附加列表添加注释:

class A:
pass

class B(A):
pass

ListOfA = List[A]

list_of_a : ListOfA = [A(), A()]

list_of_b : ListOfA = [B()]
for e in list_of_b + list_of_a:
pass

编辑:我假设 PyCharm 正在使用 Mypy,但显然 that is not the case .然而,同样的推理也适用。

关于python - 键入 : list of A and subclass of A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62263916/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com