问题描述
我有两个类,Foo
和 Bar
,它们都是 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 (将#修改为@)