Mi editor de texto de elección es extensible mediante los complementos de python. Me requiere ampliar las clases y anular sus métodos. La estructura general se ve similar al fragmento a continuación. Tenga en cuenta que la firma de la función es fija.Alcance variable fuera de las clases
Se supone que ftp_client
se comparte con instancias de ambas clases.
ftp_client = None
class FtpFileCommand(sublime_plugin.TextCommand):
def run(self, args):
global ftp_client # does it reference the variable of the outer scope?
self.ftp_client = ftplib.FTP('foo')
# login and stuff
class FtpFileEventListener(sublime_plugin.EventListener):
def run(self, args):
global ftp_client # same for this
self.ftp_client.quit() #
Se supone que estas dos clases tienen una variable en común. ¿Cuál es la mejor práctica para compartir variables?
Editar basado en madjars responder:
FtpFileCommand.run
se llama primero, instanciates ftp_client
y funciona como un encanto. FtpFileEventListener.run
se llama más adelante y puede hacer referencia a ftp_client
perfectamente pero sigue siendo None
. Al usar la palabra clave global, ¿agrega la variable como miembro al self
?
Para responder la segunda pregunta en su edición: hacer 'ftp_client' un atributo de instancia frustra el propósito de usar globales. el nuevo objeto 'FTP' debe asignarse a la variable' ftp_client' después de declararlo como global primero. después de eso, se puede hacer referencia desde cualquier lugar sin la necesidad de declararlo como global, p. 'ftp_client.quit()'. – ekhumoro