Python类型提示合并两个类的子类列表

问题描述

我有两个类,FooBar,它们都是 A 的子类。我想将各自子类的两个列表合并为一个 list[A] 类型的列表,同时保持类型提示完整。
我希望以下示例能够正常工作:

class A: pass
class Foo(A): pass
class Bar(A): pass
foo_list = [Foo(),Foo()]
bar_list = [Bar(),Bar(),Bar()]
# Attempt 1
tmp1 = foo_list + bar_list
# Attempt 2
tmp2: list[A] = foo_list + bar_list

但它们都在 bar_list(在 Pycharm IDE 中)上给出以下警告:
Expected type 'list[Foo]' (matched generic type 'list[_T]'),got 'list[Bar]' instead.
看起来类型系统过早地将 foo_List 特化为 list[Foo],这使其无法理解它也应该作为有效的 list[A] 表达式运行。

我找到了一些解决方法,但它们是两行的,不切实际:

tmp3 = foo_list.copy()
tmp3 += bar_list  # Not sure why this is allowed if the above examples aren't

tmp4: list[A] = foo_list.copy()
tmp4 = tmp4 + bar_list

为什么会抛出这些警告,更重要的是,如何在不完全禁用警告或忽略每次出现的警告的情况下解决它们?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)