Я пытаюсь применить принцип DRY к классам построения графиков в качестве интеллектуального упражнения для улучшения моего понимания ООП (в настоящее время читаю объектно-ориентированное программирование на Python), но интуитивно кажется, что использование потенциально все более глубокой иерархии наследования может привести к более сложной базе кода (тем более, что я читал, что композиция, по-видимому, предпочтительнее наследования, см. Вики-сайт «Композиция над наследованием»). Похоже, что такая игрушечная библиотека потенциально может содержать слишком много абстрактных классов, таких как AbstractMonthlyMultiPanelPlot или AbstractSeasonalPlot и т. д. и т. д. для произвольных типов графиков для размещения различных входных данных.
Есть ли более питонический способ решения приведенной ниже проблемы, который, возможно, мне не хватает? Нарушаю ли я какой-то принцип дизайна, который либо неправильно истолковал, либо, возможно, просто упустил из виду?
from abc import abstractmethod, ABC
from numpy import ndarray
from typing import List, Tuple
import matplotlib.pyplot as plt
class AbstractPlot(ABC)
@abstractmethod
def plot(self):
raise NotImplementedError
class AbstractMonthlyPlot(AbstractPlot):
@abstractmethod
def plot_for_month(ax, data):
raise NotImplementedError
@property
def n_months(self):
"""number of months in a year"""
return 12
def plot(self, month_to_data: List[Tuple[ndarray]]):
fig, axs = plt.subplots(self.n_months, 1)
for month in range(self.n_months):
self._plot_for_month(ax=axs[month], data=month_to_data[month])
class Contour(AbstractMonthlyPlot):
def _plot_for_month(self, ax, data):
ax.contourf(*data)
class Linear(AbstractMonthlyPlot):
def _plot_for_month(self, ax, data):
ax.plot(*data)
Подробнее здесь: https://stackoverflow.com/questions/793 ... ct-classes
Наследование от слишком большого количества абстрактных классов? ⇐ Python
Программы на Python
-
Anonymous
1737121068
Anonymous
Я пытаюсь применить принцип DRY к классам построения графиков в качестве интеллектуального упражнения для улучшения моего понимания ООП (в настоящее время читаю объектно-ориентированное программирование на Python), но интуитивно кажется, что использование потенциально все более глубокой иерархии наследования может привести к более сложной базе кода (тем более, что я читал, что композиция, по-видимому, предпочтительнее наследования, см. Вики-сайт «Композиция над наследованием»). Похоже, что такая игрушечная библиотека потенциально может содержать слишком много абстрактных классов, таких как AbstractMonthlyMultiPanelPlot или AbstractSeasonalPlot и т. д. и т. д. для произвольных типов графиков для размещения различных входных данных.
Есть ли более питонический способ решения приведенной ниже проблемы, который, возможно, мне не хватает? Нарушаю ли я какой-то принцип дизайна, который либо неправильно истолковал, либо, возможно, просто упустил из виду?
from abc import abstractmethod, ABC
from numpy import ndarray
from typing import List, Tuple
import matplotlib.pyplot as plt
class AbstractPlot(ABC)
@abstractmethod
def plot(self):
raise NotImplementedError
class AbstractMonthlyPlot(AbstractPlot):
@abstractmethod
def plot_for_month(ax, data):
raise NotImplementedError
@property
def n_months(self):
"""number of months in a year"""
return 12
def plot(self, month_to_data: List[Tuple[ndarray]]):
fig, axs = plt.subplots(self.n_months, 1)
for month in range(self.n_months):
self._plot_for_month(ax=axs[month], data=month_to_data[month])
class Contour(AbstractMonthlyPlot):
def _plot_for_month(self, ax, data):
ax.contourf(*data)
class Linear(AbstractMonthlyPlot):
def _plot_for_month(self, ax, data):
ax.plot(*data)
Подробнее здесь: [url]https://stackoverflow.com/questions/79364853/inheriting-from-too-many-abstract-classes[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия