Python: Frage globale/lokale Variablen und Klassen



  • Hi!

    Ich plage mich seit letzter Woche mit Python, weil ich einen Teil meiner C-Funktionen in Python umschreiben muß.

    In der originalen C-Funktion habe ich viel mit structs gearbeitet und ich glaube, daß eine Klasse in Python eine Entsprechung ist, die sinnvoll zu sein scheint.

    Ich möchte also nun eine Klasse definieren, um u.a. dort Daten abzulegen und stoße jetzt an ein Problem, daß scheints mit globalen bzw. lokalen Variablen zu tun hat.

    Hier ein simples Beispiel:

    class Element:
      def __init__(self,ID):
        self.ID       = ID
    
      def getStatus(self):
          print ("ID       = %8i" % self.ID      )
    
    def main():  
    
      Shell_1=Element(4)
      Shell_2=Element(5)
      Shell_3=Element(2)
      Shell_4=Element(8)
    
      Elements=[Shell_1,Shell_2,Shell_3,Shell_4]
    
      for Element in Elements:
        Element.getStatus()
    
    if __name__ == '__main__':
        main()
    

    Ich bekomme dann folgende Fehlermeldung:
    Traceback (most recent call last):
    File "Class_example.py", line 23, in <module>
    main()
    File "Class_example.py", line 12, in main
    Shell_1=Element(4)
    UnboundLocalError: local variable 'Element' referenced before assignment

    Muß ich die Klasse irgendwie "anmelden", damit main() sie kennt? Oder ist da noch was anderes im argen?
    Ich durchschaue es leider nicht.

    Ciao

    Jürgen



  • Die Schleifenvariable weiter unten heißt auch Element, dadurch gilt anscheinend Element in dem ganzen Scope der Funktion als lokale Variable, die halt erst weiter unten initialisiert wird.



  • Bashar schrieb:

    Die Schleifenvariable weiter unten heißt auch Element, dadurch gilt anscheinend Element in dem ganzen Scope der Funktion als lokale Variable, die halt erst weiter unten initialisiert wird.

    Hmja, wenn ich die Klasse in main() schreibe, dann klappts.

    Danke!



  • Zitier doch bitte mein Posting nicht, wenn du es vollkommen ignorierst.


Anmelden zum Antworten