因此,我正在编写一个游戏,我需要一个数据类型,它可以存储从lists、tuples、strings和integers等多个变量。我很纠结于使用dictionaries还是namedtuples。
GameData = namedtuple('GameData', ['Stats', 'Inventory', 'Name', 'Health'])
current_game = GameData((20,10,55,3), ['Sword', 'Apple', 'Potion'], 'Arthur', 100)
GameData = {'Stats': (20,10,55,3), 'Inventory': ['Sword', 'Apple', 'Potion'], 'Name': 'Arthur', 'Health': 100}您知道,这里最大的问题是所有这些值都可能发生变化,所以我需要一个可更改的数据类型,而不是namedtuple。从文档中看,namedtuples似乎有._replace(),那么这是否使它是可变的呢?
我还喜欢namedtuples有一个以name=value格式打印的__repr__方法。此外,将单独的__doc__字段分配给namedtuple中的每个值的功能也非常有用。dictionaries中有此功能吗?
发布于 2017-01-12 12:19:29
只需使用class即可。字典的问题是,您不知道期望哪些键,IDE也无法为您自动完成。namedtuple的问题是它不是可变的。使用自定义类,您可以获得可读的属性、可变的对象和大量的灵活性。需要考虑的一些备选办法:
dataclasses模块:
从数据类型导入dataclass @dataclass类GameData: stats: tuple库存: list name: str health: int发布于 2017-01-12 12:23:03
从文档中看,
namedtuples似乎有._replace(),那么这是否使它是可变的呢?
No,如文档中所指定的,它将创建一个新的namedtuple,并替换该值。
如果希望数据是可变的,那么最好自己构造一个类。
https://stackoverflow.com/questions/41613015
复制相似问题