首页 > 解决方案 > 如何为具有相同父元素的两个 python 列表的连接编写正确的类型

问题描述

我有 pydantic 模型,它们共享相同的基类

class Base(BaseModel):
    shared_arg: str

class A(Base):
    some_arg1: int

class B(Base):
    some_arg2: str

我有一个函数,它接受list[Base]作为参数。我想组合在一起list[A]list[B]以便在这个函数中传递它并对它们的shared_arg值进行操作。

假设,函数是

def work_on_bases(values: list[Base]) -> list[str]:
    return [v.shared_arg.upper() for v in values]

列表如下所示:

list_a = [A(shared_arg='hello', some_arg1=0), 
          A(shared_arg='world', some_arg1=5)]

list_b = [B(shared_arg='green', some_arg2=7), 
          A(shared_arg='horse', some_arg2=9)] 

我试着做这样的东西

combined: list[Base] = list_a + list_b

和这个

list_a_base: list[Base] = list_a
list_b_base: list[Base] = list_b
combined: list[Base] = list_a + list_b

但是pylance(pyright)仍然存在问题

Operator "+" not supported for types "list[A]" and "list[B]"

有没有办法在这里写正确的打字,或者# type: ignore是唯一的方法?

标签: pythonpython-typingpydantic

解决方案


推荐阅读