Перебирать свойства объекта и изменять их? - PullRequest
2 голосов
/ 25 февраля 2012

Есть ли способ сделать то, что я пытаюсь сделать здесь:

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]

Очевидно, что в последней строке мне нужно присвоить результат интерпретации списка обратно объекту ... но я не уверен, как.

Ответы [ 2 ]

3 голосов
/ 25 февраля 2012

перебирать имена;тогда вы можете использовать getattr и setattr.

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])
2 голосов
/ 25 февраля 2012

Если различные элементы представляют собой списки, которые выглядят так, как они есть, вам не нужен 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']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...