如何在列表中正确输入子类的提示用法?

问题描述 投票:0回答:1

如何正确输入提示:

from typing import Optional

class A: ...
class B(A): ...
class C(A): ...

my_dict: dict[str, list[Optional[A]]] = {"b": [], "c": []}

b: list[Optional[B]] = [B()]
c: list[Optional[C]] = [C()]
my_dict["b"] = b
my_dict["c"] = c

我在

mypy
中收到以下错误:

error: Incompatible types in assignment (expression has type "list[B | None]", target has type "list[A | None]")  [assignment]

这可行,但不是我想要的:

b: list[Optional[A]] = [B()]
c: list[Optional[A]] = [C()]`

我天真地认为信息将被继承,

B
C
A
的子级,因此分配是有效的,因为这是有效的:

bb: A = B()
cc: A = C()

我的处理方式是否错误?有人可以帮忙吗?

我不想说得太冗长。假设我在现实生活中有更长的

B
C
类名。

python python-typing typing
1个回答
0
投票

不确定为什么在这里使用Optional。

所有三个类都是 A 的实例,所以它只是:

class A: ...

class B(A): ...

class C(A): ...

my_dict: dict[str, list[A]] = {"b": [], "c": []}

my_dict["b"] = [B()]
my_dict["c"] = [C()]
© www.soinside.com 2019 - 2024. All rights reserved.