Seite 1 von 1

global - local

Verfasst: Montag 9. Juni 2014, 16:34
von muffin
... 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"?

Re: global - local

Verfasst: Montag 9. Juni 2014, 16:44
von Leonidas
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()

Re: global - local

Verfasst: Montag 9. Juni 2014, 16:45
von EyDu
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)

Re: global - local

Verfasst: Dienstag 10. Juni 2014, 13:56
von zappa
Oh mann :oops: ich hatte den gleichen Fehler - habe auch das self. vergessen.