python 组合 class 中 class 和 children 的类型提示

python type hinting for class and children in composition class

我正在努力做到这一点:

@dataclass
class A:
    pass

@dataclass
class B(A):
   pass

@dataclass
class container:
   stuff: List[A OR B OR any future defined child class]

我在这里和 PEP484 页面上找到的唯一方法似乎是这样的...除了它不起作用

thing_co = TypeVar('thing_co', covariant=True)
class ListOfAOrLower(List[thing_co ]):
    pass

@dataclass
class container:
   stuff: ListOfAOrLower

当我尝试创建我的容器(即“container([B()])”)时,vscode 中的 pylance 说类型不兼容。当我试图说“stuff”是一个 List[thing_co] 时,pylance 报告“TypeVar“thing_co”在此上下文中没有任何意义”。

我觉得我正在尝试做的事情非常简单,但我无法让类型检查器接受这个非常标准的公式。谁能建议如何让类型检查器屈服于我的意愿?谢谢

我的问题是 pylance 与数据类装饰器交互。通过指定我自己的初始化函数解决了这个问题。