非泛型类的泛型类方法

乔治

我正在尝试在一个非泛型类上创建一个方法,该方法创建另一个泛型类并将其返回。

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]这样的事情可能吗?

坦率

您的代码几乎可以正常工作。您可以通过将类型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 pass

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档