gpt4 book ai didi

python - 实现具有固定键类型(例如枚举类型)的字典的最佳方法?

转载 作者:行者123 更新时间:2023-12-01 00:43:02 33 4
gpt4 key购买 nike

设置

我有一个包含许多属性的数据对象,比方说:

FaceProperties( eye_color:EyeColorEnum, has_glasses:bool, 
nose_length_mm:float, hair_style:str )
  • 所有这些都是可选的,因此实例只能定义它们的子集。
  • 对于软件的每个版本,都有一组固定的受支持属性(尝试设置/获取任何其他属性将导致实现错误)
  • 我很可能需要时不时地向 future 的版本添加一个新的

到目前为止发生了什么

原则上,我非常希望将它们收集在一个 dict 中,这样我就可以用 dict 做所有可以做的好事(扩展为新 key 、迭代、通过 key 访问...)。然而,当使用不支持的 key 时,普通的 dict (和 linter)不会注意到,例如由于一些拼写错误,尤其是字符串键。

由于这些问题,我使用具有普通属性的普通类启动了该项目,并手动实现了所有通用内容(迭代等)。

有更好的选择吗?

我目前正在重构软件,并开始想知 Prop 有固定键类型的 map (我可以使用 SupportedProperties Enum)是否可以更好地解决我的问题,如果Python中有这样的东西。

现在,我可以简单地使用枚举值作为普通 dict 的键,并且可能相当不错,但如果有一些专门的 dict 那就更好了甚至不接受其他类型的键的类。

是否有一些集合(最好是内置的)我可以使用它?或者我是否必须从 UserDict 派生我自己的类并自己进行类型检查?

最佳答案

怎么样dataclasses (Python 3.7+)

from enum import Enum
from dataclasses import dataclass, asdict


class EyeColorEnum(Enum):
BLUE = 1
RED = 2


@dataclass()
class FaceProperties:
eye_color: EyeColorEnum = None
has_glasses: bool = None
nose_length_mm: float = None
hair_style: str = None


fp = FaceProperties(eye_color=EyeColorEnum.BLUE)
print(fp)
print(asdict(fp))

输出

FaceProperties(eye_color=<EyeColorEnum.BLUE: 1>, has_glasses=None, nose_length_mm=None, hair_style=None)
{'eye_color': <EyeColorEnum.BLUE: 1>, 'has_glasses': None, 'nose_length_mm': None, 'hair_style': None}

关于python - 实现具有固定键类型(例如枚举类型)的字典的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57201302/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com