Anfänger prob (Name Error)

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
lost_mind
User
Beiträge: 82
Registriert: Dienstag 13. Februar 2007, 11:55

Hi ih bekomm nen Name ERROR das gui nicht definiert ist aber es ist definiert ? und am ende printet es globals und da ist auch gui definiert ?
hier ist der code (etwas lang)
ach ja es geht nur um die funktion konto_akt

http://paste.pocoo.org/show/1230/
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi,

1.) Ich sehe keine Funktion konto_akt. Meinst Du vielleicht stand_akt()?
2.) Wie ist denn der Traceback? Bei solchen Fragen empfiehlt es sich eigentlich immer den Traceback anzugeben, ansonsten muß man am anderen Ende den Code erst ausführen und das ist u. U. eine Hürde, die dazu führt, daß Du weniger Antworten bekommst. Und jeder, der Hilfestellung geben will, wird den Fehler viel schneller eingrenzen können.
Dennoch:
3.) Ich verstehe nicht, was 'gui' in stand_akt sein soll: Weder hat die Klasse so etwas wie 'self.gui', noch gibt es irgendwo im Namespace so etwas wie 'gui'. Oder habe ich jetzt was Wesentliches übersehen?

Gruß,
Christian
lost_mind
User
Beiträge: 82
Registriert: Dienstag 13. Februar 2007, 11:55

jep sry ich meine stand_akt
der trace kan ich im moment nicht :( den bring ich morgen
gui ist die instanzierung der klasse main_gui
stand_akt geht zur instanzierung und sollte den betrage vom entry widget holen
Benutzeravatar
Dill
User
Beiträge: 470
Registriert: Mittwoch 10. Januar 2007, 14:52
Wohnort: Köln

schau dir mal die letzten 3 zeilen an...

Code: Alles auswählen

# hier wird gui benutzt
f = Finanz_Helper('konto.dat')
# hier erstellt
gui = main_gui()
# und jetzt dein "beweis", dass gui vorhanden ist.
print globals()
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

... folglich weiß "Finanz_Helper" nichts von "gui".

Ich würde es aber überhaupt so machen, daß das GUI die Instanzen der "Finanz_Helper"-Klasse verwaltet und nicht umgekehrt die "Finanz_Helper"-Klasse auf das GUI zugreift.

Der Code hat aber noch weitere Ungereimtheiten:

Code: Alles auswählen

    def stat_window(self):
        # startet die ausgabe feur die statistik
        stat = file('stat.py', 'r')
        exec stat 
überlege mal, ob es nicht besser ist, ggf. Statistikfunktionen mit in das Modul einzubetten oder als Utilityfunktionen zu importieren und dann zu nutzen.

Oder:

Code: Alles auswählen

class input_error_check(Finanz_Helper):

    def __init__(self):
        # kontrol ausgaben fur funktionen ob ein fehler enstand oder nicht
        self.input_check_result1 = None
        self.input_check_result2 = None
Hier hast Du eine Klasse, die von einer anderen abgeleitet ist, ohne, daß die "Parent-Klasse" initialisiert wird oder überhaupt von den Attributen der "Parent-Klasse" gebraucht gemacht wird. Anschließend sollen Instanzen der "input_error_check-Klasse", z. B. hier

Code: Alles auswählen

    def verliehen_hinzu(self):
        #hinzufeugen von geborgtem
        Person = verliehen_an.get()
        Betrag = verliehen_betr.get()
        Betrag = unicode(Betrag)
        Person = unicode(Person)
        check.number_check(Betrag)
        check.isalnum_check(Person)
,
in der "Parent-Klasse" verwendet werden?! Sehr seltsam. Hinzu kommt, daß die Rückgabewerde der aufgerufenen Funktionen (True oder False) nirgendwo verwendet werden, sie landen im Nirvana. ;-)

Die Liste liesse sich noch fortsetzen. In Summa: Mache doch vielleicht einen kleinen Übersichtsplan und versuche danach Dein Programm neu zu implementieren - ohne allzuviel auf den alten Code zu gucken. Bei dem bestehenden Code wirst Du - wenn Du nach vielem Hin und Her das Ding am Laufen hast - jedes Mal in Teufels Küche kommen, wenn Du den Code erweitern willst.

Gruß,
Christian

edit: Rechtschreibung
lost_mind
User
Beiträge: 82
Registriert: Dienstag 13. Februar 2007, 11:55

hm ok danke für eure ratschläge hab mir schon gedacht das der code so mies ist :( aber naja ist mein erstes prog.
jedenfals thx :) werd ich hald nochmal von scratch beginnen
die ergebnisse von input_error_check werden vom error modul benutzt ^^
aber das hab ich hier nicht gepostet wenigstens wieder was gelärnt :) ty
ach ja das mit den abegleiteten klassen, mein wissen ist in OOP noch nicht so gut , ich dachte es ist besser sie abzuleiten weil sie zum prog gehört als einfach object zu nehmen
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi lost_mind,
lost_mind hat geschrieben:hm ok danke für eure ratschläge hab mir schon gedacht das der code so mies ist :(
Ach, Quatsch. "Mies" habe ich nicht gemeint und nicht gesagt. Natürlich ist es erst einmal frustrierend, wenn eingene Arbeit auseinandergenommen wird (ich bin manchmal auch etwas zu direkt, tut mir leid), aber das gehört dazu - mein Start war kein Deut besser.

Noch ein Kommentar dazu:
lost_mind hat geschrieben: ach ja das mit den abegleiteten klassen, mein wissen ist in OOP noch nicht so gut , ich dachte es ist besser sie abzuleiten weil sie zum prog gehört als einfach object zu nehmen
"Ableiten" ist nur sinnvoll, wenn die Abgeleitete Klasse in einem sinngemäßen Zusammenhang mit der "Elternklasse" steht. Beliebtes Beispiel: Von einer Klasse "Auto" eine Klasse "VW" zu erben und dann vielleicht noch Klassen wie "Polo", "Golf", etc. von "VW" erben, mag sinnvoll sein, weil es eben alles Autos sind und sie damit viele gemeinsame Eigenschaften haben. Ziel ist es Code zu sparen und vor allem Übersichtlichkeit zu gewinnen.
In Deinem Fall würde ich mir tatsächlich überlegen wo OOP überhaupt sinnvoll ist und mich gegen die error_check-Klasse entscheiden: Sie bietet nur nützliche Funktionen (die Idee hinter den Funktionen finde ich gut), aber eben nicht mehr. Warum nicht Attribute der Konto-Klasse an diese Funktionen übergeben? Du kannst sie u. U. Teil der Konto-Klasse werden lassen oder sie als "Solo"-Funktionen ohne Klasse einfach in das Modul integrieren. Es ist ein bißchen Geschmackssache, wofür Du Dich entscheidest.

Gruß,
Christian

PS Meine Ausdrucksweise heute morgen ist bewußt nicht ganz Pythonkonform ;-).
lost_mind
User
Beiträge: 82
Registriert: Dienstag 13. Februar 2007, 11:55

ah ok ty für die Hilfreichen infos :D
das wegen dem Direkt ist schon ok in dem code war halt nur schon ein bischen zeit investiert (und ich war da nicht so gut drauf )
Antworten