Python 我能让UniCourses更像蟒蛇吗?

Python 我能让UniCourses更像蟒蛇吗?,python,curses,unicurses,Python,Curses,Unicurses,我是一个自学Python的业余程序员。由于curses模块在Windows上不起作用,我一直在研究UniCourses,一种跨平台的curses实现。我很失望地发现UniCourses函数与我喜欢的Python风格几乎没有相似之处,这可能是由于遗留支持和历史原因。例如,要向终端内的“窗口”添加文本,可以调用waddstr(窗口,str,[attr])或mvwaddstr(窗口,y,x,str,[attr])。有几十个这种命名隐晦的函数,它们需要将窗口作为参数传递,并且不将窗口视为包含方法、实例变

我是一个自学Python的业余程序员。由于curses模块在Windows上不起作用,我一直在研究UniCourses,一种跨平台的curses实现。我很失望地发现UniCourses函数与我喜欢的Python风格几乎没有相似之处,这可能是由于遗留支持和历史原因。例如,要向终端内的“窗口”添加文本,可以调用
waddstr(窗口,str,[attr])
mvwaddstr(窗口,y,x,str,[attr])
。有几十个这种命名隐晦的函数,它们需要将窗口作为参数传递,并且不将窗口视为包含方法、实例变量等的对象

我更喜欢以一种更具python风格的方式编写,在窗口和面板对象上调用方法,例如
window\u实例。添加字符串(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

作为一个没有经验的程序员,从一种语言切换到另一种语言的心理代价有些高,用更熟悉的语法包装这些函数似乎是生活质量的一大好处。我是否遗漏了UniCourses的用途?以这种方式将API包装到另一个抽象层有哪些缺点和陷阱?有没有一种替代方法仍然允许我使用标准的面向对象Python语法?

,一个内置模块,是Pythonic的
win=curses.newwin(nlines,ncols,begin\u y,begin\u x);win.addstr(s);win.addstr(y,x,s)
。你的问题可能太宽泛了,但简短的回答是“去做吧”。有许多底层模块实现了传统的C风格接口,它们只是在等待有人在更人性化的抽象层上添加合适的包装器。内置模块是Pythonic的
win=curses.newwin(nlines,ncols,begin\u y,begin\u x);win.addstr(s);win.addstr(y,x,s)
。你的问题可能太宽泛了,但简短的回答是“去做吧”。有许多底层模块实现了传统的C风格接口,它们只是在等待有人在更人性化的抽象层上添加合适的包装器。