Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 25, 2015 22:34:05

boligolov
От: СПб
Зарегистрирован: 2014-10-03
Сообщения: 51
Репутация: +  1  -
Профиль   Отправить e-mail  

Метод counter, обясните пожалуйста.

Разбираюсь в классах, не могу понять, что 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

Офлайн

#2 Янв. 25, 2015 22:45:07

boligolov
От: СПб
Зарегистрирован: 2014-10-03
Сообщения: 51
Репутация: +  1  -
Профиль   Отправить e-mail  

Метод counter, обясните пожалуйста.

Все понял
Создаем атрибут-данных равный 1. И умножаем на 2, пока значение не превысит 10.

Отредактировано boligolov (Янв. 25, 2015 22:46:33)

Офлайн

#3 Янв. 26, 2015 00:47:28

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Метод counter, обясните пожалуйста.

boligolov
x.counter = 1
Такое лучше не делать. Класс и его экземпляр могут находиться в разных модулях и вообще разрабатываться разными людьми. Если один создаст атрибут counter, другой может об этом не узнать и создать такой же атрибут.



Офлайн

#4 Янв. 26, 2015 00:54:35

boligolov
От: СПб
Зарегистрирован: 2014-10-03
Сообщения: 51
Репутация: +  1  -
Профиль   Отправить e-mail  

Метод counter, обясните пожалуйста.

py.user.next
А между прочим пример из учебника.

Офлайн

#5 Янв. 26, 2015 01:13:59

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Метод counter, обясните пожалуйста.

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

Офлайн

#6 Янв. 26, 2015 04:24:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Метод counter, обясните пожалуйста.

boligolov
А между прочим пример из учебника.

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

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

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

x.counter = 1
Так можно сделать, если counter является свойством. Если же он не является свойством, то для его чтения и изменения нужно делать акцессор и мутатор.
wiki. свойство



Отредактировано py.user.next (Янв. 26, 2015 04:29:30)

Офлайн

#7 Янв. 26, 2015 10:02:29

boligolov
От: СПб
Зарегистрирован: 2014-10-03
Сообщения: 51
Репутация: +  1  -
Профиль   Отправить e-mail  

Метод counter, обясните пожалуйста.

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

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

P.S. В общем, спасибо за дельные замечания. Ещё много предстоит изучить.

Отредактировано boligolov (Янв. 26, 2015 10:02:45)

Офлайн

#8 Янв. 26, 2015 10:59:40

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Метод counter, обясните пожалуйста.

boligolov
Механизм свойств в учебнике описан
Вот как раз и подумай: зачем нужны свойства, если то же самое можно делать, обращаясь прямо к атрибуту?
Обращение к атрибуту напрямую нарушает принцип инкапсуляции. А эффект практически такой же, как от использования глобальных переменных.



Офлайн

#9 Янв. 27, 2015 11:30:45

boligolov
От: СПб
Зарегистрирован: 2014-10-03
Сообщения: 51
Репутация: +  1  -
Профиль   Отправить e-mail  

Метод counter, обясните пожалуйста.

py.user.next
Вот как раз и подумай: зачем нужны свойства, если то же самое можно делать, обращаясь прямо к атрибуту?
С проперти проще и нагляднее, т.е. упрощает он реализацию атрибутов класса.

Офлайн

#10 Янв. 27, 2015 11:43:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

Метод counter, обясните пожалуйста.

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

Вроде бы одно и то же, но есть синтаксис для описания свойства.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version