非泛型类的泛型类方法

乔治

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

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条评论
登录后参与评论

相关文章

来自分类Dev

在Main中的非泛型类中调用泛型方法

来自分类Dev

泛型类和静态泛型方法

来自分类Dev

类的泛型和方法数量

来自分类Dev

什么是泛型类

来自分类Dev

方法必须在非泛型静态类中定义

来自分类Dev

泛型方法和泛型类中的类型推断

来自分类Dev

在具有与非泛型超类同名的泛型类中使用类方法时发生错误

来自分类Dev

从泛型类调用泛型EventHandler

来自分类Dev

类的Dlang泛型

来自分类Dev

泛型类中的泛型静态方法

来自分类Dev

非泛型类中的泛型方法

来自分类Dev

泛型类的泛型构造函数

来自分类Dev

从非泛型静态类中的泛型重载方法获取RuntimeMethodInfo

来自分类Dev

C ++:泛型类中的非泛型方法?

来自分类Dev

什么是泛型类

来自分类Dev

静态非泛型类中的泛型函数?

来自分类Dev

泛型类使用泛型参数

来自分类Dev

非泛型类中的泛型方法

来自分类Dev

类的Dlang泛型

来自分类Dev

泛型类等于

来自分类Dev

从泛型类派生

来自分类Dev

如何通过非泛型的子类从父类正确访问泛型方法?

来自分类Dev

泛型类,泛型本身就是泛型

来自分类Dev

补充泛型类

来自分类Dev

Java:具有泛型方法的泛型类

来自分类Dev

检查泛型类

来自分类Dev

如何在非泛型静态类的多个方法中使用相同的泛型类型

来自分类Dev

使用非泛型类注册泛型接口

来自分类Dev

泛型方法类型不能用作泛型类的泛型类型