python-3.x - экземпляра - переменные класса python



Могут ли экземпляры класса Python3 быть принудительно глобальными объектами при инициализации? (1)

Хотя глобальные объекты 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)

Модель глобального класса

Несмотря на рефлексивные downvotes всякий раз, когда отображается слово 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 что win.top доступен в любом месте моего сценария Python, так же, как и любая global переменная, но тогда славная и аккуратная в более контролируемой манере.

Это очень удобно для определения новых окон curses внутри main() процедуры, которая обычно curses.wrapper(main) внутри curses.wrapper(main) . Следуйте этой ссылке для полномасштабного примера curses Python3 .





global-variables