Форум сайта python.su
1
Разбираюсь в классах, не могу понять, что counter делает в этом коде.
class Complex: def __init__(self, realpart, imagpart): self.r = realpart self.i = imagpart x = Complex(3.1, -4.5) print (x.r, x.i) x.counter = 1 while x.counter < 10: x.counter = x.counter * 2 print (x.counter) del x.counter
Офлайн
1
Все понял 
Создаем атрибут-данных равный 1. И умножаем на 2, пока значение не превысит 10.
Отредактировано boligolov (Янв. 25, 2015 22:46:33)
Офлайн
857
boligolovТакое лучше не делать. Класс и его экземпляр могут находиться в разных модулях и вообще разрабатываться разными людьми. Если один создаст атрибут counter, другой может об этом не узнать и создать такой же атрибут.x.counter = 1
Офлайн
1
py.user.nextА между прочим пример из учебника.
Офлайн
14
boligolov
Там просто пример использования экземпляров класса (Ни кто не говорит, что это пример, которого стоит придерживаться при разработке какой-то системы.), а вам человек совет из жизни даёт.
Офлайн
857
boligolov
А между прочим пример из учебника.
Например, если x — экземпляр созданного выше MyClass, следующий отрывок кода выведет значение 16, не вызвав ошибок:
x.counter = 1
Отредактировано py.user.next (Янв. 26, 2015 04:29:30)
Офлайн
1
py.user.nextМеханизм свойств в учебнике описан
Так можно сделать, если counter является свойством. Если же он не является свойством, то для его чтения и изменения нужно делать акцессор и мутатор.
wiki. свойство

alex925Учебник показывает возможности языка, а “подводные камни” уже всплывут при дальнейшей работе.
boligolovТам просто пример использования экземпляров класса (Ни кто не говорит, что это пример, которого стоит придерживаться при разработке какой-то системы.), а вам человек совет из жизни даёт.
Отредактировано boligolov (Янв. 26, 2015 10:02:45)
Офлайн
857
boligolovВот как раз и подумай: зачем нужны свойства, если то же самое можно делать, обращаясь прямо к атрибуту?
Механизм свойств в учебнике описан
Офлайн
1
py.user.nextС проперти проще и нагляднее, т.е. упрощает он реализацию атрибутов класса.
Вот как раз и подумай: зачем нужны свойства, если то же самое можно делать, обращаясь прямо к атрибуту?
Офлайн
857
boligolov
С проперти проще и нагляднее, т.е. упрощает он реализацию атрибутов класса.
>>> class A1: ... x = 1 ... >>> class A2: ... _x = 1 ... @property ... def x(self): ... return self._x ... @x.setter ... def x(self, v): ... self._x = v ... >>> a1 = A1() >>> a1.x 1 >>> >>> a2 = A2() >>> a2.x 1 >>>
Офлайн