尽管全局 Python 对象往往很糟糕,但我或多或少被迫将它们与模块curses
一起使用。我目前有这个:
class Window:
def __init__(self, title, h, w, y, x):
self.window = curses.newwin(h, w, y, x)
self.window.box()
self.window.hline(2, 1, curses.ACS_HLINE, w-2)
self.window.addstr(1, 2, title)
self.window.refresh()
global top_win
top_win = Window('Top window', 6, 32, 3, 6)
我想知道是否有可能通过在类定义或初始化中添加一些东西来摆脱global
行?
class Window:
def __init__(self, title, h, w, y, x):
# Some global self magic
self.window = curses.newwin(h, w, y, x)
self.window.box()
self.window.hline(2, 1, curses.ACS_HLINE, w-2)
self.window.addstr(1, 2, title)
self.window.refresh()
top_win = Window('Top window', 6, 32, 3, 6)
全局类模式
尽管每当看到global
这个词时,我都会反射性地投反对票,但我还是通过应用同样有争议的全球类模式解决了我的问题。
class win:
pass
class Window:
def __init__(self, title, h, w, y, x):
self.window = curses.newwin(h, w, y, x)
self.window.box()
self.window.hline(2, 1, curses.ACS_HLINE, w-2)
self.window.addstr(1, 2, title)
self.window.refresh()
win.top = Window('Top window', 6, 32, 3, 6)
这导致win.top
可以在我的 Python 脚本中的任何位置访问,就像任何global
变量一样,但随后以更可控的方式漂亮而整洁。
这对于在通常包装在curses.wrapper(main)
中的main()
例程中定义新的curses
窗口非常方便。点击此链接查看完整的 Python3curses
示例。