Python数据类:检查字段是否在可能值列表中
我希望Python数据类中的字段仅具有某些可能的值。 例如,我想要一个Python数据类:检查字段是否在可能值列表中,python,python-dataclasses,python-class,Python,Python Dataclasses,Python Class,我希望Python数据类中的字段仅具有某些可能的值。 例如,我想要一个Jeweldataclass,其字段material只能接受值“gold”、“silver”和“platinum”。 我提出了这个解决方案: @dataclass 珠宝类: 种类:str 材料:str 定义后初始化(自): ok_材料=[“金”、“银”、“铂”] 如果自材料不在ok_材料中: raise VALUERROR(f“仅可用材料:{ok_materials}.” 因此,珠宝(“耳环”、“银色”)就可以了,而珠宝(“
Jewel
dataclass,其字段material
只能接受值“gold”、“silver”和“platinum”。
我提出了这个解决方案:
@dataclass
珠宝类:
种类:str
材料:str
定义后初始化(自):
ok_材料=[“金”、“银”、“铂”]
如果自材料不在ok_材料中:
raise VALUERROR(f“仅可用材料:{ok_materials}.”
因此,珠宝(“耳环”、“银色”)
就可以了,而珠宝(“耳环”、“塑料”)
会引发值错误
有没有更好的或者更像蟒蛇的方法来实现这一点?可能是依赖于数据类模块的特性的东西
您应该将ok_材质创建为一个集合
根据PEP-8,你应该把不在自我之前的材料
ok_材质应该是一个类属性(至少从我对您的类的了解来看)
如果您不希望用户修改ok_材质,可以在下方加下划线。
就数据类的特殊性而言,我显然对这个类不够熟悉,无法给出答案
这个场景正是s的目的
>>> from enum import Enum
>>> class Material(Enum):
... gold = 1
... silver = 2
... platinum = 3
...
>>> Material.diamond
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\...\enum.py", line 341, in __getattr__
raise AttributeError(name) from None
AttributeError: diamond
>>> Material.gold
<Material.gold: 1>
>>从枚举导入枚举
>>>类别材料(枚举):
... 黄金=1
... 银=2
... 铂金=3
...
>>>材料.钻石
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\…\enum.py”,第341行,位于\uu getattr中__
从“无”提升AttributeError(名称)
属性错误:钻石
>>>材料,黄金