python - 如何在 Python 中的泛型类型上使用 isinstance
问题描述
我正在尝试检查参数是否是类声明中指定的泛型类型的实例。但是 Python 似乎不允许这样做。
T = TypeVar('T')
class MyTypeChecker(Generic[T]):
def is_right_type(self, x: Any):
return isinstance(x, T)
这给出了错误'T' is a type variable and only valid in type context
。
解决方案
您可以使用该__orig_class__
属性,但请记住,这是一个实现细节,在这个答案中更详细。
from typing import TypeVar, Generic, Any
T = TypeVar('T')
class MyTypeChecker(Generic[T]):
def is_right_type(self, x: Any):
return isinstance(x, self.__orig_class__.__args__[0]) # type: ignore
a = MyTypeChecker[int]()
b = MyTypeChecker[str]()
print(a.is_right_type(1)) # True
print(b.is_right_type(1)) # False
print(a.is_right_type('str')) # False
print(b.is_right_type('str')) # True
推荐阅读
- datatable - 角材料 MatTableDataSource 服务器端分页不起作用
- reactjs - 当应用程序在本机反应中处于后台时如何更新服务中的纬度和经度
- corda - Is there a limit to the number of inputs/outputs states during transaction building?
- java - 使用 for 循环的 Java 搜索数组未找到所有结果
- sql - 使用外部表将数据从一个 sql 数据库传输到 azure 中的其他数据库
- asp.net - ASP.NET MVC 中的模拟和授权
- r - 基于矩阵元素为igraph中的节点添加属性
- qt - Qt:未正确添加子布局
- travis-ci - 具有 Firebase 托管和 create-react-app 的 Travis:找不到公共目录
- angular - 第二次尝试时,ionic3 ion-slide 不会转到下一张幻灯片