[英]How to use generic namedtuple in Python3.7/3.8?
我正在尝试在 Python 3.7(和 3.8)中使用通用命名元组功能,但解释器会引发错误。 我用的是坏方法吗?
from typing import NamedTuple, TypeVar, Generic
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
T = TypeVar("T")
class MyResult(NamedTuple, Generic[T]):
Body: T
Status: int
def func1() -> MyResult[Person]:
return MyResult(Person('asghar',12), 200)
引发以下错误:
Traceback (most recent call last):
File "/Users/kamyar/Documents/generic_named_tuple.py", line 16, in <module>
def func1() -> MyResult[Type[Person]]:
TypeError: 'type' object is not subscriptable
感谢@shynjax287,我使用了解决方法来修复代码:
from typing import NamedTuple, TypeVar, Generic, Type
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
T = TypeVar("T")
class MyResult(NamedTuple):
Body: T
Status: int
class MyResultGeneric(MyResult, Generic[T]):
pass
def func1() -> MyResultGeneric[Person]:
return MyResultGeneric[Person](Person('asghar',12), 200)
print(func1().Body.name)
甚至 PyCharm 也知道返回类型并且自动完成工作正常!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.