1 回答
TA贡献1803条经验 获得超3个赞
诚然,我从来没有真正使用过该attr模块,而是为了对您的代码进行最小的更改。我认为 usingtyping.List在这里也很有用。我个人会使用数据类,但这似乎也有效
import attr
import typing
from collections import namedtuple
live = namedtuple('live', ['number', 'did'])
@attr.s
class Cat(object):
name = attr.ib()
lives: typing.List[live] = attr.ib()
c = Cat('somecat', lives=[live(**{'number': 1, 'did': 'smile'})])
print(c)
c.lives[0].number # auto completes
仅使用数据类
import typing
from dataclasses import dataclass
@dataclass
class live:
number: int
did: str
@dataclass
class Cat:
name: str
lives: typing.List[live]
c = Cat('somecat', lives=[live(**{'number': 1, 'did': 'smile'})])
print(c)
c.lives[0].number # autocompletes
但是对于嵌套字典,这些数据类可能很难。像这样
data = {
'name': 'somecat',
'lives': [
{'number': 1, 'did': 'nothing'},
{'number': 2, 'did': 'saved the world'}
]
}
new_c = Cat(**data)
new_c.lives = [live(**data) for data in new_c.lives]
如果可以的话,我建议调查一下pydantic。
添加回答
举报