如何正确地为列表中的子类使用类型提示?

0 投票
1 回答
46 浏览
提问于 2025-04-13 02:14

我该如何正确地进行类型提示:

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()]`

我天真地以为,既然 BCA 的子类,那么这个赋值就是有效的,因为这样做是可以的:

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

我是不是走错方向了?有没有人能帮帮我?

我不想说得太复杂。假设在实际情况中,BC 的类名会更长。

1 个回答

1

不太明白你为什么在这里使用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()]

撰写回答