gpt4 book ai didi

python - 在模块级别或类内定义列表

转载 作者:太空宇宙 更新时间:2023-11-04 02:15:59 24 4
gpt4 key购买 nike

我有一个类方法,通过将字典与列表进行比较来验证字典是否包含我期望的所有键。

目前,我在类的模块级别定义了集合,如下所示:

expected_keys = {
'key1',
'key2',
'key3',
'key4',
}

class Spam(object):
def __init__(self, config_dict):
try:
self.validate_configs(configs)
except TypeError, ValueError:
raise

...

def validate_configs(self, config_dict):
if not isinstance (config_dict, dict):
raise TypeError('Config structure is not a dictionary.')

if not expected_keys == config_dict.keys():
raise ValueError('Config dict does not have all necessary keys.')

这是最好的(性能和实践方面)方法吗?我计划一次实例化可能有数百个这样的对象,但我不确定当前方法是否会导致性能下降。真正的 expected_keys 集也包含大约 30 个条目。只要我正确地做事,我就可以克服它在我的源文件中看起来有多难看(“应该有一个——最好只有一个——显而易见的方法来做到这一点”)。

最佳答案

扩展@PM2Ring 的评论,你应该做几件事:

1.) 将您的 expected_keys 更改为 set(目前它是一个 tuple。一个集合用 {} 表示)。根据 @PM2Ring 的评论,您可以通过将其作为 class attribute 而不是固定用于类对象的方式来保持它的整洁:

class Spam(object):
expected_keys = {
'key1',
'key2',
'key3',
'key4',
}

def __init__(self, config_dict):
# continue defining the rest of your class...

2.) 像这样更改您的上次验证:

if not expected_keys.issubset(config_dict.keys()):
raise ValueError('Config dict does not have all necessary keys.')

这会检查 config_dict 是否包含您所有的 expected_keys,但仍会验证 config_dict 是否具有与预期不同的其他键。

如果根据您的评论,config_dict 必须具有与 expected_keys 完全相同的键(不多也不少),那么您应该验证作为:

if not expected_keys == config_dict.keys():
raise ValueError('Config dict does not have all necessary keys.')

关于python - 在模块级别或类内定义列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52652634/

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