首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非泛型类上的泛型类方法

非泛型类上的泛型类方法
EN

Stack Overflow用户
提问于 2020-11-04 08:13:09
回答 1查看 46关注 0票数 0

我试图在一个非泛型类上创建一个方法,该方法创建另一个泛型类并返回它。

代码语言:javascript
复制
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]。这样的事情有可能发生吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-13 06:55:17

您的代码几乎可以正常工作。您可以通过将类型int作为参数传递给CreateItem函数来修复它:

代码语言:javascript
复制
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的特定类型提示

代码语言:javascript
复制
class OtherClass2:
    def CreateItem(self, name: str, value=None):
        return Item(name=name, value=value)

other2 = OtherClass2()
item2 = other2.CreateItem("some_field", 45)

itemitem2之间没有区别

代码语言:javascript
复制
assert item == item2  # this assertion will pass
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64672582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档