我正在使用字典和类,我想检查字典和类是否具有相同的字段类型。
例如,我有一个形式为
的数据类@dataclasses.dataclass
class FlatDataclass:
first_field: str
second_field: int
我有一个这样形式的字典
my_dict={first_field:"a_string", second_field:"5"}
我想检查字典的值是否具有适合类的类型。
到目前为止,我可以从下面得到字典的类型:
dct_value_types = list(type(x).__name__ for x in list(dct.values()))
返回(str,"str)
然而
[f.type for f in dataclasses.fields(klass)]
[
而不是['str', 'str'],所以我不能比较它们。
如何获得可以比较的类型?
你可以这样做
[f.type.__name__ for f in dataclasses.fields(klass)]
或者你这样做
dct_value_types = list(type(x) for x in list(dct.values()))
注意我在这里添加或删除了__name__
,所以两个类型检查都应该有或没有
您可以使用这个函数来检查数据类中的所有字段是否存在于给定的字典中并且具有相同的类型-
def has_all_fields(d, custom_class):
return all(field.name in d and isinstance(d[field.name], field.type) for field in dataclasses.fields(custom_class))
@dataclasses.dataclass
class FlatDataclass:
first_field: str
second_field: int
my_dict={"first_field":"a_string", "second_field":5}
print(has_all_fields(my_dict, FlatDataclass))
输出:
True
请注意,如果dictionary的字段数比数据类的字段数多,该方法仍将返回True。