Как передавать одному методу класса операции из другого метода?

Есть код, который нужно дополнить(по заданию)

class Render():
    def __init__(self):
        pass

    def init_screen(self, h, w):
        raise NotImplementedError

    def add_object(self, char, x, y):
        raise NotImplementedError

    def draw_screen(self):
        raise NotImplementedError

    def get_input(self):
        raise NotImplementedError

Интерфейс этого класса, помимо конструктора, состоит из четырех методов:

  1. init_screen, инициализация экрана заданной высоты и ширины.
  2. add_object, добавление объекта на экран. Эта функция принимает символ, который нужно нарисовать и его позицию на экране.
  3. draw_screen, отрисовка экрана.
  4. get_input, получение пользовательского ввода.

Необходимо завести класс ShellRenderer, который будет рисовать экран игры в консоли.

  1. Заведите в нем поле _screen, которое будет представлять собой список списков символов, размера h на w.
  2. Инициализируйте его пробелами при вызове метода init_screen.
  3. Метод add_object должен изменять значение одного из элементов списка _screen на символ char.
  4. Метод draw_screen должен выводить список на печать при помощи вызова print.
  5. В методе get_input можно использовать функцию input, чтобы получить пользовательский ввод. Возвращайте введенную пользователем строку.

Я сделал практически всё, что требовалось, но у меня проблема в self._screen, туда не передаётся элемент из add_object.

class ShellRender(Render):
    def init_screen(self, h, w):
        self.h = h
        self.w = w
        self._screen = ["\n".join(map(str, [self for i in range(w)])) for j in range(h)]
    def add_object(self, char, x, y):
        self.char = x, y
    def draw_screen(self):
        print(self.char)
    def get_input(self):
        return input()

Если _screen = [['*', '+', '*'], ['#', '#', '#']], то печатаем

*+*
###

Надеюсь на помощь в преобразовании моего кода под задание, я явно делаю что-то не так...в частности я не могу передать из одного метода элемент char в другой метод, ну то есть в char по идее будут задаваться какие-то символы по типу *, +, *. Но возможно я что-то ещё сделал не так.


Ответы (1 шт):

Автор решения: CrazyElf

Вы кажется путаете между собой _screen и char. Нужно как-то так:

def add_object(self, char, x, y):
    self._screen[y][x] = char
def draw_screen(self):
    print(self._screen)

И да, ещё нужно инициализировать _screen как список списков, а вот уже печатать его - с помощью join и т.д.

→ Ссылка