En mi proyecto tengo 2 clases. Tengo un problema para acceder a las variables de 2da clase. La estructura del código es la siguiente.

class Ui_Dialog(object):
    def setupUi(self, Dialog):
       -------------------
       -------------------
       -------------------
       -------------------
       -------------------
    def function1(self):
       self.variable_I_wanna_share="XXXX"
       -------------------
       -------------------
class Ui_MainWindow(QtGui.QMainWindow,Ui_Dialog):
    def setupUi(self, MainWindow):
       -------------------
       -------------------
       -------------------
       -------------------

    def function2(self):
       *Want to get that variable to here*
       -------------------

Heredé la segunda clase de la primera clase, pero no funcionó. ¿Alguien puede ayudarme a resolver esto? Nota: las clases 1 y 2 se generan a partir de pyuic4 (pyqt) por separado Gracias.

0
Vibhutha Kumarage 5 dic. 2016 a las 07:35
2
Está utilizando una variable de instancia, no una variable de clase, por lo que debe acceder a ella desde una instancia. De todos modos, como está escrito self.variable_I_wannna_share no existirá hasta que use function1. Es posible que deba hacer eso en function2 cuando lo herede.
 – 
juanpa.arrivillaga
5 dic. 2016 a las 07:39
Como self.variable_I_wanna_share en la función 2?
 – 
Vibhutha Kumarage
5 dic. 2016 a las 07:41
¿Qué tal usar una variable de clase? por ejemplo en tu __init__()?
 – 
Chiheb Nexus
5 dic. 2016 a las 07:45
Escribí self.variable_I_wanna_share en function2. Recibí un error AttributeError: 'Ui_MainWindow' object has no attribute 'variable_I_wanna_share'
 – 
Vibhutha Kumarage
5 dic. 2016 a las 07:57

1 respuesta

La mejor respuesta

Como se ha sugerido, creo que puede archivar lo que desee utilizando variables de clase.

class Ui_Dialog(object):
    variable_I_wanna_share = "XXXX"
    def setupUi(self, Dialog):
        pass
    def function1(self):
       Ui_Dialog.variable_I_wanna_share="YYYY"

class Ui_MainWindow(Ui_Dialog):
    def setupUi(self, MainWindow):
        pass
    def function2(self):
        #accessing class variable
        print(Ui_Dialog.variable_I_wanna_share)

dialog=Ui_Dialog()

window=Ui_MainWindow()

Y aquí está la clase var:

In [3]: window.function2()
XXXX

Puedes modificar la clase var con tu function1 desde cualquiera de las instancias

In [4]: window.function1()

In [5]: window.function2()
YYYY

También puede acceder a modificar la clase var desde las instancias

In [6]: window.variable_I_wanna_share
Out[6]: 'YYYY'

In [7]: dialog.variable_I_wanna_share
Out[7]: 'YYYY'

Solo recuerde que si modifica una clase var refiriéndola desde una instancia, solo la modificará para esa instancia.

In [8]: dialog.variable_I_wanna_share="ZZZZ"

In [9]: window.variable_I_wanna_share
Out[9]: 'YYYY'

In [10]: dialog.variable_I_wanna_share
Out[10]: 'ZZZZ'
2
J.Serra 6 dic. 2016 a las 19:30