Быстрый способ преобразовать все переменные экземпляра в классе в список (Python) - PullRequest
0 голосов
/ 07 марта 2019

Я создал класс с более чем 100 переменными экземпляра (так как он будет использоваться в функции, чтобы делать что-то еще).

Есть ли способ перевести все переменные экземпляра;в список массивов.Без добавления вручную каждой переменной экземпляра.

Например:

class CreateHouse(object):
    self.name = "Foobar"
    self.title = "FooBarTest"
    self.value = "FooBarValue"
    # ...
    # ...
    # (100 more instance variables) 

Есть ли более быстрый способ добавить все эти элементы в список: Быстрее, чем:

theList = []

theList.append(self.name)
theList.append(self.title)
theList.append(self.value)
# ... (x100 elements)

Список будет использоваться длявыполнить другую задачу, в другом классе / методе.

1 Ответ

0 голосов
/ 07 марта 2019

Единственное решение (без полного переосмысления всего вашего проекта - какой вариант FWIW может быть рассмотрен, см. Мои комментарии по вашему вопросу) - это иметь список имен атрибутов (в том порядке, в котором вы хотите, чтобы они были в окончательном списке).) и используйте getattr

class MonstruousGodClass(object):
    _fields_list = ["name", "title", "value", ] #etc...

    def as_list(self):
        return [getattr(self, fieldname) for fieldname in self._fields_list]

Теперь, поскольку, как я упоминал в комментарии, list НЕ является правильным типом данных (по крайней мере, из семантического POV), вы можете использоватьdict вместо этого - что делает код намного проще:

    import copy 

    def as_dict(self):
        # we return a deepcopy to avoid unexpected side-effects
        return copy.deepcopy(self.__dict__) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...