mypy:将具有泛型类型的变量与任何类型的变量进行比较

问题描述

如何将具有泛型类型的属性与具有明确定义类型的变量进行比较?

我有一个名为 ResultWrapper 的类,它具有泛型类型的属性

from typing import TypeVar,Generic,Optional
from attr import dataclass

T = TypeVar("T")
U = TypeVar("U")

@dataclass
class ResultWrapper(Generic[U,T]):
    eval: Optional[U] = None
    student: Optional[T] = None

def get_wrappers(evals: List[U],students: List[T]) -> List[ResultWrapper]:
    # Returns a list of wrappers.
    return [ResultWrapper(eval,student) for eval,student in zip(evals,students)]

在我的测试中,我将包装器对象与预期结果进行比较:

from typing import List,Any

def compare_wrappers(wrappers: List[ResultWrapper],evals: List[Any],students: List[Any]):
    for wrapper,eval,student in zip(wrappers,evals,students):
        assert wrapper.eval == eval
        assert wrapper.student == student

actual = get_wrappers([1,2],["Bob","Frank"])
compare_wrappers(actual,[1,"Frank"])

这会引发错误,因为 evalstudent 属性是通用类型,无法与我传递的整数字符串列表进行比较。

    assert wrapper.eval == eval
E           AssertionError: assert ~U == 1
E            +  where ~U = ResultWrapper(eval=~U,student=~T).

如何将具有泛型类型的属性与具有明确定义类型的变量进行比较?

我不想将 eval 变量转换为 compare_wrappers() 中的 int,因为 eval 可以有任何类型。有没有办法动态获取 eval 的类型并将其转换为该类型而不是硬编码类型?

解决方法

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

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

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