#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]