Python: Использование декораторов v/s mixins?
Я понял основы декораторов и миксинов. Декораторы добавляют новую функциональность к объекту без изменения других экземпляров объекта того же класса, в то время как миксин является разновидностью множественного наследования, используемого для наследования от нескольких родительских классов.
Означает ли это, что декораторы должны использоваться, когда вам нужно изменить только один экземпляр объекта, и использовать миксины, когда вам нужен целый новый класс объектов. Или есть что-то еще, что я мог бы упустить? Какие могут быть реальные случаи использования для обоих?
1 ответ
На мой взгляд, вам нужны миксины, когда у вас есть несколько разных классов, которые должны иметь одинаковую функциональность.
Хорошими примерами использования миксинов являются классовые представления Django. Например, у вас есть несколько разных классов: FormView, TemplateView, ListView. Все они имеют одну похожую функциональность: они должны отображать шаблоны. У каждого из этих классов есть свой миксин, который добавляет методы, необходимые для рендеринга шаблона.
Другой пример, если вам нужно добавить класс для API, который возвращает результат JSON. Он также может быть унаследован от базового класса View. Вы просто пропускаете шаблонные миксины и определяете, что вам нужно (и, вероятно, пишете свой собственный миксины для кодирования JSON).
Кроме того, вы можете переопределить некоторые методы, предложенные в миксинах, которые позволяют вам изменять некоторые части общего кода для вашего локального случая. Это все о ООП, приятель!
Короче говоря: миксины добавляют новые функциональные возможности.
Декораторы используются для изменения существующих функций. Например, если вам нужно записать, что возвращается из метода в вашем классе. Правильный выбор здесь - декоратор (добавленный к соответствующим методам).
Надеюсь, это полезно. Если нет, пожалуйста, задавайте вопросы. Я обновлю свой ответ.