У меня есть метод (dosomething), который определяет атрибут (self.b). Фиктивный код ниже:
class foo:
def __init__(self):
self.a = 1
def dosomething(self, i):
self.b = 2 * self.a + i
return self.b ** 2
testobj = foo()
Атрибут a может измениться - поэтому вызывается dosomething для определения b с учетом текущего значения a.
Я хочу написать понимание списка, как показано ниже. За исключением того, что мне нужно позвонить dosomething для b, чтобы измениться. Фиктивный код ниже просто повторяет текущее значение self.b 20 раз.
[testobj.b for i in range(20)] # pass i to dosomething then store self.b
Самый быстрый способ - просто вернуть self.b, но оператор return занят другим значением, которое намного сложнее. Если бы я мог вернуть self.b, то сработал бы следующий оператор:
[testobj.dosomething(i) for i in range(20)]
Атрибут b - это просто промежуточное значение, к которому я хочу получить доступ. Есть ли одно понимание списка лайнеров для этой ситуации? Я думал об определении функции в методе, который возвращает self.b, но я не уверен, как я смогу получить к ней доступ должным образом. Так что что-то вроде foo (). Dosomething (1) .getb () не будет работать, потому что dosomething (1) оценивается как число.
class foo:
def __init__(self):
self.a = 1
def dosomething(self, i):
self.b = 2 * self.a + i
def getb():
return self.b
return self.b ** 2
Полагаю, мне следует добавить, что я не хочу возвращать структуру данных с разными значениями. Это повлияло бы на большую часть моего кода в другом месте.