Форум сайта python.su
4
Привет.
Читаю книгу Доусона “Программируем на Phyton” 2013
на стр.230 такой пример:
class Critter(): total = 0 @staticmethod #декоратор def status () : print("\nBcero зверюшек сейчас" . Critter.total) def __init__ (self, name): рrint("Появилась на свет новая зверюшка!") self.name = name Critter.total += 1 # основная часть crit1= Сrittеr("зверюшка 1") crit2 = Сrittеr("зверюшка 2") critЗ = Сrittеr("зверюшка 3") Critter.status() print(crit1 .total)
Отредактировано panama555 (Окт. 7, 2019 17:43:48)
Офлайн
857
panama555Critter - это класс. Класс - это множество объектов, объединённых одним набором признаков. Таким образом операции с классом являются операциями над всем множеством объектов этого класса.
Я не понял: 1) зачем нужно делать этот метод статическим?
panama555Статический метод не требует наличия даже одного объекта класса. У него нет self. Такие методы либо относятся как-то к классу по смыслу и не требуют объектов этого класса, либо используют данные обо всём множестве объектов, хранимые прямо в классе как в объекте.
2)чем отличается статический метод от нестатического?
Отредактировано py.user.next (Окт. 7, 2019 20:02:41)
Офлайн
4
Видимо я не очень акцентировал смысл вопроса.
попробую ещё раз.
Я понял, что в программе присутствует метод (status) который относится ко всему классу, а не к экземплярам класса. Поэтому в его параметрах не нужно указывать параметр self.
Я не про это спрашивал. Автор объяснил почему и зачем.
Я не пойму зачем автор написал строку: @staticmethod
Он пишет, что эта строка является декоратором и именно поэтому метод status будет статическим
Поэтому у меня возникли вопросы, которые можно свести к одному:
зачем нужно писать строку @staticmethod (если, как вы утверждаете, метод является статическим если он относится к классу, а не к экземплярам класса)? К тому же, если я удалю эту строку из программы - ничего не изменится. Программа работает корректно. Поэтому: зачем нужна строка: @staticmethod?
Казалось бы: не указывай в параметрах self и этого достаточно. Метод уже статический. Зачем лишняя строка в программе.
Неужели эта строчка для того, чтобы напомнить программисту, который будет её читать и редактировать в будущем, что “этот метод статический. НЕ ЗАБУДЬ!”
Офлайн
857
panama555Проверь на такой строке (удали декоратор и запусти)
К тому же, если я удалю эту строку из программы - ничего не изменится. Программа работает корректно.
crit1.status()
panama555Интерпретатору даётся указание сделать это метод другим внутри.
Зачем лишняя строка в программе.
Отредактировано py.user.next (Окт. 7, 2019 20:55:05)
Офлайн
4
Вот теперь понял. Спасибо
Офлайн
186
> Класс - это множество объектов, объединённых одним набором признаков.
Не совсем так, сам класс не является множеством, а определяет его. Множеством является тип данных 
> зачем нужно делать этот метод статическим?(если уберу декоратор - всё нормально работает)
> чем отличается статический метод от нестатического?
обычный метод принимает первым параметром ссылку на экземпляр класса, метод класса ссылку на текущий класс, а статический метод принимает только свои аргументы.
Статический метод это просто функция которая находится в пространстве имён класса.
Офлайн
857
RodegastКласс - это множество объектов, обладающих одинаковым набором признаков. И “класс” - это понятие из парадигмы ООП, как и “объект”. А Python уже имплементирует эти понятия из ООП своим способом. Так что нельзя путать класс в контексте ООП и класс в контексе питона. Семантика класса в питоне не равна семантике класса в ООП-парадигме.
Не совсем так, сам класс не является множеством, а определяет его. Множеством является тип данных
Офлайн
186
> Класс - это множество объектов, обладающих одинаковым набором признаков
Нет! Множеством является тип данных, а класс его определяет. К питону это прямого отношения не имеет.
Отредактировано Rodegast (Окт. 8, 2019 11:49:36)
Офлайн
857
RodegastПодожду, пока ты не прочитаешь какие-нибудь книжки. Потом уже будем дискутировать.
Нет! Множеством является тип данных, а класс его определяет.
Офлайн
186
> Подожду, пока ты не прочитаешь какие-нибудь книжки. Потом уже будем дискутировать.
Да чего там читать, это хорошо известные вещи…
https://ru.wikipedia.org/wiki/тип_данных
https://ru.wikipedia.org/wiki/класс_(математика)
Офлайн