programacion privados poo orientada objetos instancias funciones ejemplos curso clases clase atributos python-3.x class oop initialization global-variables

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 .