迭代对象属性并更改它们?

2024-06-02 11:54:51 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有办法做我想做的事情:

for item in [self.docket_numbers, self.neutral_citations,
             self.lower_courts, self.lower_court_judges,
             self.dispositions, self.judges, self.nature_of_suit]:
    if item is not None:
        item = [clean_string(sub_item) for sub_item in item]

显然,在最后一行中,我需要将列表解释的结果分配回对象……但我不确定如何分配。在


Tags: inselfforitem事情lowernumbers办法
2条回答

迭代这些名称;然后可以使用getattr和{}。在

for attr in ('docket_numbers', 'neutral_citations',
             'lower_courts', 'lower_court_judges',
             'dispositions', 'judges', 'nature_of_suit'):
    item = getattr(self, attr)
    if item is not None:
        setattr(self, attr, [clean_string(sub_item) for sub_item in item])

如果各种项目都是列表(看起来是这样的),则不需要setattr,只需在适当的位置更改它们:

>>> def clean_string(s):
...     return ''.join(c for c in s if c != '7')
... 
>>> class Court(object):
...     def __init__(self):
...         self.docket_numbers = ["a1", "b277"]
...         self.dispositions = ["happy", "sad77"]
...     def clean(self):
...         for item in [self.docket_numbers, self.dispositions]:
...             if item is not None:
...                 item[:] = [clean_string(sub_item) for sub_item in item]
... 
>>> C = Court()
>>> vars(C)
{'dispositions': ['happy', 'sad77'], 'docket_numbers': ['a1', 'b277']}
>>> C.clean()
>>> vars(C)
{'dispositions': ['happy', 'sad'], 'docket_numbers': ['a1', 'b2']}

相关问题 更多 >