我试图在一个非泛型类上创建一个方法,该方法创建另一个泛型类并返回它。
from dataclasses import dataclass
from typing import TypeVar, Generic
T = TypeVar('T')
@dataclass
class Item(Generic[T]):
name: str
value: T = None
class OtherClass:
def CreateItem(self, type: T, name: str, value=None):
return Item[T](name=name, value=value)
other = OtherClass()
item = other.CreateItem[int]("some_field", 45)其中最后的item应该是一个Item[int]。这样的事情有可能发生吗?
发布于 2020-11-13 06:55:17
您的代码几乎可以正常工作。您可以通过将类型int作为参数传递给CreateItem函数来修复它:
from dataclasses import dataclass
from typing import TypeVar, Generic
T = TypeVar('T')
@dataclass
class Item(Generic[T]):
name: str
value: T = None
class OtherClass:
def CreateItem(self, tp, name: str, value=None):
return Item[tp](name=name, value=value)
other = OtherClass()
item = other.CreateItem(int, "some_field", 45)但是,请注意,Python中的类型提示主要用于mypy和IDE等类型检查器中的静态分析。它们通常不会在运行时使用。
您也可以用它替换OtherClass,而不使用Item的特定类型提示
class OtherClass2:
def CreateItem(self, name: str, value=None):
return Item(name=name, value=value)
other2 = OtherClass2()
item2 = other2.CreateItem("some_field", 45)item和item2之间没有区别
assert item == item2 # this assertion will passhttps://stackoverflow.com/questions/64672582
复制相似问题