如何正确地为列表中的子类使用类型提示?
我该如何正确地进行类型提示:
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
的类名会更长。
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()]