假设我有一个字典列表,例如:
list_of_dicts = [
{'id': 'something', type: 'type_a', blah...},
{'id': 'anotherthing', type: 'type_b', blah...},
{'id': 'yetanotherthing', type: 'type_c', blah...},
etc.
]
我有一些对象,例如:
class Base(object):
def __init__(self, blah):
self.blah = blah
class TypeA(Base):
class TypeB(Base):
class TypeC(Base):
etc.
我想遍历列表,然后根据条件,假设:
for elem in list_of_dicts:
if elem['type'] == 'type_a':
my_obj = TypeA(blah)
elif elem['type'] == 'type_b':
my_obj = TypeB(blah)
etc.
我可能有很多课。如果/elif 选择正确的对象,我该如何避免这个非常长的时间?有没有动态的方法来实现这一目标?更好的是,我是不是太聪明了,没有为每种类型的对象明确选择和设置?
每个对象可能有 10 多个要设置的属性,而且这个 if/elif 块非常长并且难以阅读/维护。
更新:
最有可能的答案是,我完全错了。我最初的目标是拥有这个嵌套字典,并且我想以特定的方式“清理”/增强每个字典元素。也许对于具有 'type'=='type_a' 的元素,我想添加几个新键。如果'type'=='type_b',也许我想编辑一两个键的名称。如果'type'=='type_c',我想编辑某个键的值等。可能有 30,40 种或 50 种不同的类型。所以我从一个“凌乱”的嵌套字典开始,然后取回一个“干净”的字典,修改了我的方式。
我最初的方法是为每种类型设置一个类。然后每个类都可以有自己的@property
修饰方法来以特定的方式设置某些属性。它们都继承自同一个基类,该基类有一个方法,该方法返回一个字典,其中所有属性作为键。