170 похожих чатов

Как правильно реализовать стратегию, которая использует методы экземпляра класса, в

котором она используется?
В примере - стратегия поиска соседей в 2D сетке использует методы left, right, и т.д. этой сетки.
Я реализовал это передав self в стратегию. Но это выглядит очень ужасно.

class GridNeighborsStrategy(ABC):
@abstractmethod
def __call__(self, obj, x, y):
pass


class ClassicNeighborsStrategy(GridNeighborsStrategy):
def __call__(self, obj, x, y):
return obj.left(), obj.right(), obj.top(), obj.bottom()


class Grid2D:
def __init__(self, neighbors_strategy=None):
if neighbors_strategy is None:
neighbors_strategy = ClassicNeighborsStrategy()

self.neighbors_strategy = neighbors_strategy

def left(self): return

def right(self): return

def top(self): return

def bottom(self): return

def get_neighbors(self, x, y):
return self.neighbors_strategy(self, x, y)

example2DGrid = Grid2D()
print(example2DGrid.get_neighbors(0, 0))

2 ответов

3 просмотра

Нормально выглядит, только выкинь твои left, right и тд и просто тащи через индексы

Akari- Автор вопроса
Kirill Shikhalev
Нормально выглядит, только выкинь твои left, right...

У меня в оригинале еще есть grid.get(x,y) Так что там все более абстрактно выглядит.

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
Кто создает тут ботов для телеграмм групп ?
Antskup
8
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
14
Вроде бы вопрос уже заезжанный, но тем не менее У меня есть функция menu() которая выводит набор возможных действий, а затем спрашивает у пользователя что он хотел бы сделать....
David Golovatin
2
Я хочу запустить свой проект в тг. Что-то между пирамидой и майнилкой. Еще подобного ничего не было. Уникальная идея. Нужен именно не бот, а приложение. С ввод, выводом тон...
Павел А.
6
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Карта сайта