尽管全局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)
答案 0 :(得分:0)
尽管只要看到global
这个词就反复下来,但无论如何我通过应用equally controversial global class pattern解决了我的问题。
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
例程中定义新main()
窗口非常方便,curses.wrapper(main)
例程通常包含在debug
内。请点击此链接查看full blown Python3 curses
example。