global - local

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
muffin
User
Beiträge: 19
Registriert: Dienstag 19. Februar 2013, 10:43

... hoffentlich werde ich jetzt nicht gekillt :K aber ich hab da so meine Probleme mit global(en) Variablen.

Code: Alles auswählen


PI = 3.1415

class Test:
    def schreiben(self, a):
        print (PI)   
        print(a)
        
    def lesen(self):    
        print(a)


testen = Test()
testen.schreiben(33)
testen.lesen()
Die Fehlermeldung ist klar... "global name 'a' is not defined"

Aber wie komme ich denn jetzt an a anders dran als es vorher als

Code: Alles auswählen

global
zu kennzeichnen?
An PI komme ich in der Funktion ja auch dran - ist PI dann nicht auch quasi automatisch "global"?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wie in jedem OOP-Tutorial zu lesen ist:

Code: Alles auswählen

PI = 3.1415
     
class Test:
    def schreiben(self, a):
        print (PI)
        self.a = a
        print(self.a)
           
    def lesen(self):    
        print(self.a)
          
testen = Test()
testen.schreiben(33)
testen.lesen()
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du willst doch gerade kein globales "a" haben, sondern für jede Instanz von Test ein eigenes "a". Ein "global" wäre also vollkommen falsch, da sich alle Test-Objekte das selbe "a" teilen würde. Daher musst du das "a" als Attribut von Test anlegen:

Code: Alles auswählen

class Test:
    def schreiben(self, a):
        self.a = a

        print(a)

    def lesen(self):
        print(self.a)
Dem ganzen solltest du aber noch eine init-Methode spendieren, dann sieht man auf den ersten Blick die verwendeten Attribute:

Code: Alles auswählen

class Test:
    def __init__(self):
        self.a = None
    
    def schreiben(self, a):
        self.a = a

        print(a)

    def lesen(self):
        print(self.a)
Das Leben ist wie ein Tennisball.
zappa
User
Beiträge: 26
Registriert: Samstag 19. März 2011, 22:31

Oh mann :oops: ich hatte den gleichen Fehler - habe auch das self. vergessen.
Antworten