有没有可能像这样在NamedTuple中创建NamedTuple?
from typing import NamedTuple, List, Optional
class BabyData(NamedTuple):
name: str
age: int
body_measurement: Optional[NamedTuple('height': List, 'weight': List)] = None谢谢!
发布于 2021-01-10 17:11:02
您可能希望在此用例中使用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发布于 2021-01-10 17:17:00
提供的示例在运行时输出错误。
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', age=1, body_measurement={'height': [50, 51], 'weight': [3, 3.5]})实际上,您尝试混合使用两种定义NamedTuple的方法。根据the documentation。
class Employee(NamedTuple):
name: str
id: int
# This is equivalent to:
Employee = collections.namedtuple('Employee', ['name', 'id'])您还应该考虑使用dataclasses,请参阅foxyblue's answer。
https://stackoverflow.com/questions/65651345
复制相似问题