Python 诅咒 : module function vs instance function

标签 python function module attributes curses

我最近一直在研究 Curses 在 Python 中的工作原理。我已经按照这里的教程进行操作:Curses Programming with Python ,并且我已经成功地弄乱了他们的代码以将文本正确输出到控制台屏幕中的不同位置。

我的问题是: 为什么模块的某些功能属性,例如curses.noecho() 但其他功能是屏幕对象的属性,例如sreen_instance.keypad(True)?

让屏幕实例指定诸如 noecho()cbreak() 之类的东西而不是模块对我来说是有意义的。

这背后的原因是什么?是否有任何通用规则来识别一个函数应该是模块的属性,还是 Curses 库中对象实例的属性?

最佳答案

尽管名称“stdscr”是“standard screen”,但它是一个 curses window(而且它是顶层窗口如果有子窗口)。

属性位于curses 级别或window 级别,因为这就是相应函数在curses 中的组织方式。大多数 Python 绑定(bind)与 C 库具有相同的名称和相似的参数(允许 Python 绑定(bind)中的可选参数减少使用的名称数量,例如,Python 中的 addstr 与 C 中的 waddstr)。

要了解它是如何工作的,我只需查看 curses C 接口(interface):任何使用 WINDOW* 参数的东西(包括别名,例如 getch () as wgetch(stdscr) ) 将作为 window 属性(或函数)在 Python 绑定(bind)中实现,而那些不使用 WINDOW 参数将是一个 curses 属性(或函数)。

关于Python 诅咒 : module function vs instance function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45553143/

相关文章:

python - 键盘快捷键 "Takes 1 positional argument but 2 were given"

python - 在常规 python 脚本中使用 Tornado 异步代码

C 函数调用 : Understanding the "implicit int" rule

python - 是否建议在 python 函数中使用 print 语句而不是 return

Magento - 安装脚本未运行(但正确记录添加到 core_resource )

module - 编译Ocaml游戏时未绑定(bind)模块事件错误

python - 我可以更改 Python 中默认的 __add__ 方法吗?

python - 如何增加屏幕尺寸并将其置于显示器中央?

javascript - 如何创建一个不会在旧浏览器上导致错误的 ES6 模块?

python - 我希望一个函数能够将字符串列表或多个字符串作为参数作为 *args