是否可以在初始化时强制 Python3 类实例为全局对象?



尽管全局 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示例。

相关内容

  • 没有找到相关文章

最新更新