如何解决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"])
这会引发错误,因为 eval
和 student
属性是通用类型,无法与我传递的整数字符串列表进行比较。
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 举报,一经查实,本站将立刻删除。