1 / 1 / 0
Регистрация: 25.03.2016
Сообщений: 13
1

@classmethod и @staticmethod

09.06.2016, 20:22. Показов 5323. Ответов 11

Студворк — интернет-сервис помощи студентам
Сможете привести примеры использования данных декораторов и популярно объяснить их направленность?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.06.2016, 20:22
Ответы с готовыми решениями:

Classmethod
Такой вот вопрос, начал искать что такое classmethod, но так толком и не понял зачем он нужен, для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
09.06.2016, 20:42 2
http://python-3.ru/tag/Статиче... ы%20Python

Вообще это теория ООП, скачай учебник Марк Лутц Изучаем python и почитай его.
0
1 / 1 / 0
Регистрация: 25.03.2016
Сообщений: 13
09.06.2016, 20:45  [ТС] 3
Я понимаю примерно что они делают, но мне нужен реальный код, где они используются.
0
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
09.06.2016, 20:46 4
Лучший ответ Сообщение было отмечено decimatorengine как решение

Решение

Страница 887
1
1 / 1 / 0
Регистрация: 25.03.2016
Сообщений: 13
09.06.2016, 20:54  [ТС] 5
Спасибо) Обязательно прочту.
0
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
09.06.2016, 20:57 6
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Shape:
    shapes = []
 
    def __init__(self, name, id):
        self.id = id
        self.name = name
        self.shapes.append(self)
 
    @staticmethod
    def print_static():
        print(Shape.shapes)
 
    @classmethod
    def print_cls(cls):
        print(cls.shapes)
 
    def __str__(self):
        return '{}, {}'.format(self.name, self.id)
 
    def __repr__(self):
        return '{}, {}'.format(self.name, self.id)
 
a = Shape('Круг', 1)
b = Shape('Квардрат', 2)
с = Shape('Круг', 3)
Shape.print_static()
Shape.print_cls()
Пример надуманный, но примерно как-то так
0
1 / 1 / 0
Регистрация: 25.03.2016
Сообщений: 13
09.06.2016, 21:00  [ТС] 7
Часто вы используете эти декораторы? Я знаю, что, например, с помощью @classmethod можно реализовать абстрактную фабрику.
0
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
09.06.2016, 21:03 8
Очень редко
1
21 / 21 / 2
Регистрация: 31.12.2015
Сообщений: 100
09.06.2016, 21:11 9
Предположим, есть класс А. В классе есть метод do().
Ты создаешь экземпляры А - а1, а2, а3. А этот метод - do() - по твоему замыслу вообще никак не отличается что в a1, что в a2, что в a3. Скажем, он всегда использует аргументы, не связанные с a1, a2, a3, (например, выводит на экран "Привет, мир" или еще что-то там делает). Проще говоря, итог один что при вызове a1.do(), что при вызове a2.do(), что при вызове a3.do(). С тем же успехом можно во всех случаях вызвать A.do(). Это и есть статический метод. Ты можешь пометить его как @staticmethod, а в коде метода A.do() self не передавать. Тогда при вызове a1.do() или a2.do() или a3.do() фактически будет выполняться A.do(). По сути это обычная функция, волею программиста оказавшаяся внутри класса. Можно представить, что эта функция находится за пределами определения класса, для простоты.
Classmethod принимает не ссылку на экземпляр класса, а ссылку на подкласс. Это позволяет тебе дергать(вызывать) методы класса из подклассов, не создавая экземпляров класса. При этом подкласс использует метод класса как собственный, подставляя себя как это обычно делают экземпляры, когда указывают себя под именем self.
Наверное ничего непонятно
2
2740 / 2343 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
09.06.2016, 21:34 10
Цитата Сообщение от decimatorengine Посмотреть сообщение
Я знаю, что, например, с помощью @classmethod можно реализовать абстрактную фабрику.
Если хочешь узнать о паттернах и как их правильно использовать в Python почитай книгу Марк Саммерфилд Python на практике.
0
1 / 1 / 0
Регистрация: 25.03.2016
Сообщений: 13
09.06.2016, 21:38  [ТС] 11
Я собираюсь прочесть Лучано Ромальо - К вершинам мастерства и тогда уже буду изучать паттерны. Python на практике - отличная книга.
0
Эксперт Python
4607 / 2028 / 359
Регистрация: 17.03.2012
Сообщений: 10,086
Записей в блоге: 6
10.06.2016, 07:44 12
Редко, но иногда имеет смысл. Это упрощает код, не надо следить за созданием экземпляров.
0
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru