Возврат элементов из классов в списке

#python #class

#python #класс

Вопрос:

Я хочу вернуть все значения из моего пользовательского класса, которые хранятся в списке, аналогичном тому, что можно сделать с помощью node.items() в networkx :

 class CustomClass:
    def __init__(self):
        self.idx = 1
        self.value = 5

class_list = [c1, c2, c3, c4]

clas_values = class_list.values()

class_values -> [(idx_c1, value_c1), (idx_c2, value_c2), .....] 
  

Что, я думаю, мне нужно сделать, это использовать декоратор @classmethod и написать функцию values() в моем CustomClass() ?

Я не ищу понимания списка, поскольку мне пришлось бы копировать-вставлять это несколько раз.

Комментарии:

1. [(c.idx, c.value) for c in class_list]

2. Это работает, но я подумал, что это довольно очевидно, что мне нужна простая вызываемая функция для этой цели и не всегда переписывать то, что вы предлагаете.

3. Фил, но если ты поместишь код, отправленный Олвином, в функцию, разве ты не получишь легко вызываемую функцию?

4. Ну, допустим, было просто раннее утро, и я зациклился на идее, что я хочу вызвать class.values(). значения (class) выполняли бы тот же трюк.

Ответ №1:

Если вы действительно хотите использовать предложенный вами синтаксис, вам придется написать свою собственную коллекцию, вот пример:

 class CustomClass:
    def __init__(self, i):
        self.idx = i
        self.value = 5

class CustomList(list):
    def values(self):
        return [(c.idx, c.value) for c in self]

class_list = CustomList([CustomClass(3), CustomClass(4)])

clas_values = class_list.values()
print(clas_values)
  

С принтами
[(3, 5), (4, 5)]

В противном случае, как уже предлагалось, вы могли бы просто использовать вспомогательную функцию, например:

 def values(lst):
    return [(c.idx, c.value) for c in lst]