Могу ли я сделать UniCurses более Pythonic?

Я программист-любитель, изучаю Python. Поскольку модуль curses не работает в Windows, я смотрел на UniCurses, кроссплатформенную реализацию Curses. Я был разочарован, обнаружив, что функции UniCurses мало похожи на стиль Python, который я полюбил, вероятно, из-за устаревшей поддержки и исторических причин. Например, чтобы добавить текст в "окно" терминала, вы вызываетеwaddstr(WINDOW, str, [attr]) или mvwaddstr(WINDOW, y, x, str, [attr]). Существуют десятки этих функций с загадочными именами, которые требуют передачи окна в качестве параметра и не обрабатывают окно как объект с методами, переменными экземпляра и т. Д.

Я бы предпочел писать в более питоническом стиле, где методы вызываются для объектов окна и панели, например window_instance.add_string(string, [attr]), в идеале предоставляя необязательные параметры x и y методу для включения mvwaddstr() в том же определении метода, что и waddstr().

На ум приходит определение класса для оконной конструкции следующим образом:

import unicurses 
# this would normally be 'from unicurses import * ' but I'm trying to being explicit here

...

class PseudoWindow(object):
    def __init__(self, num_cols,num_lines, begin_x, begin_y):
        self.id = unicurses.newwin(nlines, ncols, begin_y, begin_x) 
        # use this value in unicurses functions

    def __del__(self):
        unicurses.delwin(self.id)

    def add_string(self, string, [attr], x = None, y = None)
        if x is None and y is None:
            unicurses.waddstr(self.id, string, [attr])
        else:
            unicurses.mvwaddstr(self.id, string, y, x, [attr])

    # wrap further unicurses functions into methods of PseudoWindow as required

Для неопытного программиста умственные затраты на переключение с одного языка на другой несколько высоки, и включение этих функций в более знакомый синтаксис может оказаться большим преимуществом для качества жизни. Мне что-то не хватает о том, как использовать UniCurses? Каковы недостатки и подводные камни подобного обертывания API на дополнительном уровне абстракции? Есть ли альтернатива этому подходу, которая позволила бы мне использовать стандартный объектно-ориентированный синтаксис Python?

0 ответов

Другие вопросы по тегам