Наследование от слишком большого количества абстрактных классов?Python

Программы на Python
Ответить
Anonymous
 Наследование от слишком большого количества абстрактных классов?

Сообщение 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)


Подробнее здесь: https://stackoverflow.com/questions/793 ... ct-classes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»