问题描述
如何将具有泛型类型的属性与具有明确定义类型的变量进行比较?
我有一个名为 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 (将#修改为@)