Python: ¿Cómo paso las variables entre instancias de clase u obtengo la persona que llama?

class foo(): def __init__(self) self.var1 = 1 class bar(): def __init__(self): print "foo var1" f = foo() b = bar() 

En foo, estoy haciendo algo que produce que “var1” se establezca en 1 In bar, me gustaría acceder a los contenidos de var1

¿Cómo puedo acceder a var1 en la clase de instancia f de foo desde dentro de la instancia b de la barra?

Básicamente estas clases son wxframes diferentes. Entonces, por ejemplo, en una ventana, el usuario puede estar ingresando datos de entrada, en la segunda ventana, usa esos datos de entrada para producir una salida. En C ++, tendría un puntero a la persona que llama pero no sé cómo acceder a la persona que llama en Python.

Como forma general para que diferentes páginas en wxPython accedan y editen la misma información, considere crear una instancia de clase de información en su clase de MainFrame (o como se le haya llamado) y luego pasar esa instancia a cualquier otra página que cree. Por ejemplo:

 class info(): def __init__(self): self.info1 = 1 self.info2 = 'time' print 'initialised' class MainFrame(): def __init__(self): a=info() print a.info1 b=page1(a) c=page2(a) print a.info1 class page1(): def __init__(self, information): self.info=information self.info.info1=3 class page2(): def __init__(self, information): self.info=information print self.info.info1 t=MainFrame() 

La salida es:

 initialised 1 3 3 

La información solo se inicializa una vez que se comprueba que solo hay una instancia, pero page1 ha cambiado la variable info1 a 3 y page2 ha registrado ese cambio.

Nadie ha proporcionado un ejemplo de código que muestre una manera de hacer esto sin cambiar los argumentos de inicio. Simplemente podría usar una variable en el ámbito externo que define las dos clases. Esto no funcionará si una clase está definida en un archivo fuente separado de la otra, sin embargo.

 var1 = None class foo(): def __init__(self) self.var1 = var1 = 1 class bar(): def __init__(self): print var1 f = foo() b = bar() 

Igual que en cualquier idioma.

 class Foo(object): def __init__(self): self.x = 42 class Bar(object): def __init__(self, foo): print foo.x a = Foo() b = Bar(a) 

Alternativamente, podría tener una clase base común de la cual ambas clases derivadas heredan la variable de clase var1 . De esta manera, todas las instancias de clases derivadas pueden tener acceso a la variable.

Algo como:

 class foo(): def __init__(self) self.var1 = 1 class bar(): def __init__(self, foo): print foo.var1 f = foo() b = bar(foo) 

Debería poder pasar objetos en Python tal como pasa los punteros en c ++.

Tal vez esto se agregó al lenguaje ya que esta pregunta fue hecha …

La palabra clave global ayudará.

 x = 5 class Foo(): def foo_func(self): global x # try commenting this out. that would mean foo_func() # is creating its own x variable and assigning it a # value of 3 instead of changing the value of global x x = 3 class Bar(): def bar_func(self): print(x) def run(): bar = Bar() # create instance of Bar and call its bar.bar_func() # function that will print the current value of x foo = Foo() # init Foo class and call its function foo.foo_func() # which will add 3 to the global x variable bar.bar_func() # call Bar's function again confirming the global # x variable was changed if __name__ == '__main__': run()