Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 23, 2011 02:02:43

garza
От:
Зарегистрирован: 2011-03-14
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Автоматическое изменение атрибута при изменении другого атрибута

class polynom:
coeff = []
length = len(coeff)


p1 = polynom
p1.coeff = [1, 2, 3]
print p1.length
тут получается length = 0. А нужно так чтобы при каждом измении coeff в length автоматически записывалось пересчитанное значение. как сделать?



Офлайн

#2 Июнь 23, 2011 02:49:53

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Автоматическое изменение атрибута при изменении другого атрибута

class Polynom(object):
length = property(lambda self: len(self.coeff))

def __init__(self):
self.coeff = []
>>> polynom = Polynom()
>>> polynom.length
0
>>> polynom.coeff = [1, 2, 3]
>>> polynom.length
3
..bw



Отредактировано (Июнь 23, 2011 02:51:02)

Офлайн

#3 Июнь 23, 2011 16:42:20

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Автоматическое изменение атрибута при изменении другого атрибута

Я бы сделал coeff проперти и в ее сеттере устанавливал бы self.length. Так не нужно будет при каждом обращении к length ее считать.



Офлайн

#4 Июнь 23, 2011 17:30:14

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Автоматическое изменение атрибута при изменении другого атрибута

Ed
Я бы сделал coeff проперти и в ее сеттере устанавливал бы self.length. Так не нужно будет при каждом обращении к length ее считать.
а оно не считается, длинна хранится в переменной внутри листа.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version