Родительский класс инициализирует данные, которые должен использовать дочерний класс: лучший подход и обеспечение соблюдPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Родительский класс инициализирует данные, которые должен использовать дочерний класс: лучший подход и обеспечение соблюд

Сообщение Anonymous »

У меня есть родительский класс, который инициализирует объект matplotlib.axes._axes.axes с некоторой конфигурацией, которая необходима, чтобы результируемые участки сохраняются правильно. Дочерний класс может расширить родительские классы _plot_initial_frame и методы _update_frame для специализации графика. Однако, с текущим дизайном, я на самом деле не «заставляю» инициализировать сюжет с правильной конфигурацией, скорее мне придется полагаться на знание разработчика (предположительно, предоставляя документацию), что им необходимо назвать Super () ._ plot_initial_frame () в классе ребенка, чтобы получить ожидаемое поведение. занятия? Похоже, что мой подход уже немного подозрительна с точки зрения дизайна, потому что я по сути изменяю «защищенные» данные-обсуждая чтение о том, почему чистый код, предполагающий избегание защищенных переменных, и есть ли какие-либо законные варианты использования для защищенной видимости. Изображение в конце также показывает, почему необходимо применять конкретную конфигурацию: без указания прямоугольной конфигурации в оси изображение (оба 2048 x 1024) не правильно отображается. Вы можете видеть, что левое изображение имеет много места в белом месте (

Код: Выделить всё

bbox_inches='tight'
не является решением здесь, кстати, так как оно просто зажимает пробелы, а результирующее изображение больше не является 2048 x 1024), в то время как правильное изображение очень «полнее» (то есть без пробела).

from matplotlib.pyplot import axes, figure
from cartopy.crs import Projection, PlateCarree

class WorldMapAnimator:

def __init__(
self, projection: Projection = PlateCarree(), n_frames: int = 3):
self._projection = projection
self._n_frames = n_frames

@staticmethod
def get_rectangle_for_full_plot():
"""Emulating a public static const"""
rectangle_for_full_plot = [0, 0, 1, 1]
return rectangle_for_full_plot

def animate(self):
self._plot_initial_frame()
for frame in range(self._n_frames):
self._update_frame(frame)

def _plot_initial_frame(self):
self._fig = figure()

# IMPORTANT: The axes must have this type of rectangle configuration
self._ax = axes(
self.get_rectangle_for_full_plot(),
projection=self._projection)

self._ax.coastlines()

def _update_frame(self):
return

class PerlinNoiseAnimator(WorldMapAnimator):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)

def _plot_initial_frame(self):

# IMPORTANT: here I am modifying a member of the parent class
# and also "soft" requiring the user to call super otherwise they
# won't get expected behavior...
super()._plot_initial_frame()

self._ax.pcolormesh(...) # TODO: write some perlin noise to worldmap
return

def _update_frame(self):
# do something to update the map with new perlin noise here
return




Подробнее здесь: https://stackoverflow.com/questions/796 ... ch-and-enf
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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