如何解决在 NamedTuple 中使用 NamedTuple 和可选类型
是否可以像这样在 NamedTuple
内部创建 NamedTuple
?
from typing import NamedTuple,List,Optional
class BabyData(NamedTuple):
name: str
age: int
body_measurement: Optional[NamedTuple('height': List,'weight': List)] = None
谢谢!
解决方法
您可能希望在此用例中使用 dataclasses
:
from typing import Optional
from dataclasses import dataclass
@dataclass
class Measurements:
height: list
weight: list
@dataclass
class Baby:
name: str
age: int
body: Optional[Measurements] = None
你也可以让类引用自己:
from __future__ import annotations
from typing import Optional
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
parent: Optional[Person] = None
,
提供的示例在运行时输出错误。
body_measurement: Optional[NamedTuple('height': List,'weight': List)] = None
^
SyntaxError: invalid syntax
要修复它,您需要
from typing import NamedTuple,List,Optional
class BabyData(NamedTuple):
name: str
age: int
body_measurement: Optional[
NamedTuple("BodyMeasurement",[("height",List),("weight",List)])
] = None
if __name__ == "__main__":
baby = BabyData(
name="john",age=1,body_measurement={"height": [50,51],"weight": [3,3.5]}
)
print(baby)
# BabyData(name='john',body_measurement={'height': [50,'weight': [3,3.5]})
实际上,您尝试混合定义 NamedTuple
的两种方式。根据{{3}}。
class Employee(NamedTuple):
name: str
id: int
# This is equivalent to:
Employee = collections.namedtuple('Employee',['name','id'])
您还应该考虑使用 the documentation,请参阅 dataclasses
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。