python-3.x - privados - poo python 3
¿Pueden las instancias de la clase Python3 ser forzadas a ser objetos globales en la inicialización? (1)
Aunque los objetos globales de Python tienden a ser malos, me veo más o menos forzado a usarlos con curses módulo. Actualmente tengo esto:
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)
Me pregunto si sería posible deshacerse de la línea global agregando algo a la definición de clase o inicialización.
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)
Patrón de clase global
A pesar de los downvotes reflexivos cada vez que se ve la palabra global , resolví mi problema de todos modos al aplicar el patrón de clase global igualmente controvertido .
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)
Esto hace que win.top sea accesible en cualquier parte de mi script de Python, tal como lo hubiera sido cualquier variable global , pero luego agradable y ordenada de una manera más controlada.
Esto es bastante útil para definir nuevas ventanas de curses dentro de la rutina main() que generalmente se envuelve dentro de un curses.wrapper(main) . Siga este enlace para obtener un ejemplo completo de curses Python3 .