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

boligolovТакое лучше не делать. Класс и его экземпляр могут находиться в разных модулях и вообще разрабатываться разными людьми. Если один создаст атрибут counter, другой может об этом не узнать и создать такой же атрибут.x.counter = 1
py.user.nextА между прочим пример из учебника.
boligolov
А между прочим пример из учебника.
Например, если x — экземпляр созданного выше MyClass, следующий отрывок кода выведет значение 16, не вызвав ошибок:
x.counter = 1
py.user.nextМеханизм свойств в учебнике описан
Так можно сделать, если counter является свойством. Если же он не является свойством, то для его чтения и изменения нужно делать акцессор и мутатор.
wiki. свойство

alex925Учебник показывает возможности языка, а “подводные камни” уже всплывут при дальнейшей работе.
boligolovТам просто пример использования экземпляров класса (Ни кто не говорит, что это пример, которого стоит придерживаться при разработке какой-то системы.), а вам человек совет из жизни даёт.
boligolovВот как раз и подумай: зачем нужны свойства, если то же самое можно делать, обращаясь прямо к атрибуту?
Механизм свойств в учебнике описан
py.user.nextС проперти проще и нагляднее, т.е. упрощает он реализацию атрибутов класса.
Вот как раз и подумай: зачем нужны свойства, если то же самое можно делать, обращаясь прямо к атрибуту?
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 >>>