Найти - Пользователи
Полная версия: Метод counter, обясните пожалуйста.
Начало » Python для новичков » Метод counter, обясните пожалуйста.
1
boligolov
Разбираюсь в классах, не могу понять, что 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
Все понял
Создаем атрибут-данных равный 1. И умножаем на 2, пока значение не превысит 10.
py.user.next
boligolov
x.counter = 1
Такое лучше не делать. Класс и его экземпляр могут находиться в разных модулях и вообще разрабатываться разными людьми. Если один создаст атрибут counter, другой может об этом не узнать и создать такой же атрибут.
boligolov
py.user.next
А между прочим пример из учебника.
alex925
boligolov
Там просто пример использования экземпляров класса (Ни кто не говорит, что это пример, которого стоит придерживаться при разработке какой-то системы.), а вам человек совет из жизни даёт.
py.user.next
boligolov
А между прочим пример из учебника.

Например, если x — экземпляр созданного выше MyClass, следующий отрывок кода выведет значение 16, не вызвав ошибок:

Там даже речь не про Complex, а про MyClass - класс-пример. Он просто показывает, что так возможно создать атрибут.

Это аналогично тому, что возможно вообще записать код в одну строку, но это не значит, что нужно так делать.

x.counter = 1
Так можно сделать, если counter является свойством. Если же он не является свойством, то для его чтения и изменения нужно делать акцессор и мутатор.
wiki. свойство
boligolov
py.user.next
Так можно сделать, если counter является свойством. Если же он не является свойством, то для его чтения и изменения нужно делать акцессор и мутатор.
wiki. свойство
Механизм свойств в учебнике описан

alex925
boligolovТам просто пример использования экземпляров класса (Ни кто не говорит, что это пример, которого стоит придерживаться при разработке какой-то системы.), а вам человек совет из жизни даёт.
Учебник показывает возможности языка, а “подводные камни” уже всплывут при дальнейшей работе.

P.S. В общем, спасибо за дельные замечания. Ещё много предстоит изучить.
py.user.next
boligolov
Механизм свойств в учебнике описан
Вот как раз и подумай: зачем нужны свойства, если то же самое можно делать, обращаясь прямо к атрибуту?
Обращение к атрибуту напрямую нарушает принцип инкапсуляции. А эффект практически такой же, как от использования глобальных переменных.
boligolov
py.user.next
Вот как раз и подумай: зачем нужны свойства, если то же самое можно делать, обращаясь прямо к атрибуту?
С проперти проще и нагляднее, т.е. упрощает он реализацию атрибутов класса.
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
>>>

Вроде бы одно и то же, но есть синтаксис для описания свойства.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB