【发布时间】:2020-11-17 10:37:35
【问题描述】:
我正在尝试使用 TypeVar 将 init 参数指示为某种类型。 但我做错了,或者根本不可能。
from typing import TypeVar
T=TypeVar("T")
class TestClass:
def __init__(self,value:T):
self._value=value
a = TestClass(value=10)
b = TestClass(value="abc")
reveal_type(a._value)
reveal_type(b._value)
我希望 a._value 的显示类型是 int 和 b._value 是 string。
但它们都显示为“T`-1”
任何帮助或见解表示赞赏!
[编辑]
更多扩展的示例。 BaseClass 将被覆盖,实际的类型提示由覆盖类提供。
from typing import TypeVar
T=TypeVar("T")
class BaseClass:
def __init__(self,value):
self._value = value
class Class1(BaseClass):
def __init__(self,value:str):
super().__init__(value)
class Class2(BaseClass):
def __init__(self,value:int):
super().__init__(value)
a = Class1("A value")
b = Class2(10)
reveal_type(a._value)
reveal_type(b._value)
【问题讨论】:
-
你写这段代码的时候是什么意思?你期望类型变量做什么?这不是你使用类型变量的方式。
-
你想让
TestClass是通用的还是什么? -
我基本上希望 _value 属性采用我分配给它的值的类型。但事实并非如此。
-
您必须将
TestClass定义为泛型,即class TestClass(Generic[T]):。否则,T的具体类型仅作用于方法并在之后丢失。
标签: python python-typing