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 .