OOP für Dummy's

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.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Servus nach nun 2Tagen suchen und rumprobieren (Fehlermeldungen zu hauf ) Rechnerabstürtzen u.s.w

hab ich mich entschlossen mal eine Intelligende Anfangsfrage zustellen

Wie um alles in der welt komm ich an die variable ran

A.py

Code: Alles auswählen


class Aa():
    def Aaa():
        self.aaa='aaa'
 
B.py

Code: Alles auswählen

import A
class Bb():
    def Bbb():
        self.bbb=A.aaa
        print self.bbb
  
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hast Du mal das Tutorial durchgearbeitet?

Code: Alles auswählen

Class A:
    def Aaa(self):
        self.aaa="aaa"

...

a = A()
a.Aaa()
print a.aaa
So sollte es gehen ;-)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo!

Vorsicht Falle!

``import A`` importiert nicht die Klasse, sondern das Modul.

Um auf die Klasse A zugreifen zu können, muss man die Instanz so bilden:

``a = A.A()``

mfg
Gerold
:-)

PS: Klassennamen mit großem Anfangsbuchstaben. Funktionen und Methoden klein. Modulnamen sollten immer klein geschrieben werden.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Wie gesagt für Blköde
ich schaff das nicht

so was nun drinsteht
A.py

Code: Alles auswählen

class Aa():
    def Aaa(self):
        self.aaa="aaa"
B.py

Code: Alles auswählen


import A
class Bb():
    def Bbb(self):
        a=A.A()
        a.Aaa()
        self.bbb=a.aaa
        print self.bbb
   
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Schreib dir doch mal dazu, was genau welche Zeile machen soll und warum sie das tun soll.

Dann fällts dir sicher auf ;)

Und achte auch die Fehlermeldungen, die sind...tatsächlich wichtig.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich würde auch mal von diesem "Aaaaa" Zeugs weg - das ist imho zu akademisch. Klar ist es toll, wenn man das Verständnis für die Konzepte abprüfen will, aber fürs Erlernen sollte man doch mal auf eingängige Probleme (Namen!) zurückgreifen.

Einfach ein Beispiel aus der Realität, mit dem man etwas anfangen kann ...
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Was ihn aber dennoch nicht davon abhalten wird, Klassennamen falsch zu schreiben ;)
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Ich ab hier 3 Lauffähige Frame Module je ca 560 zeilen
die ich gerne kombinieren möchte was auch sehr gut läuft nur die variablen insgesamt 3stück sollen interagieren

und das klappt nicht

1 Modul mit 1500 zeilen ohne klasse ist auch nicht sinn der sache wenn man Hochentwickelt Arbeitet SCHLANGE bietet da forteile gegenüber basic

ich weios schonn warumm bei mir in der firma alle mit BASCOM arbeiten
da ist eine variable immer fest im speicherregister verankert und kann von überall ausgelesen werden
bei OOP ist jedes modul jede klasse und jede instanz eigenständig
sogar jede objektvariable ist unikat

ich hab 15Jahre ablauf programmierung mit goto und gosub hinter mir
und ca 4semester C vor 15Jahren nun ein neuversuch Privat

TUTORIEN schön und gut es läuft ja alles eigensrtänfig mehr schlecht als recht aber es läuft so wie ich es haben will
auch wenn 'for item,val in liste.iteritem()'
mal mit x=0 while x < len(liste) x=x+1 rauskommt

es geht
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Also dein A.A() gibt es nicht. Versuchs mal mit a = A.Aa().
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Man lernt ja nie aus

meine tollküne lösung

A.py

Code: Alles auswählen

aa='aa'
class Aa():
    def Aaa(self):
        self.aaa="aaa"
    def Getaaa(self):
        return self.aaa
    
def main():
    print 'aa ist '+aa
    a=Aa()
    a.Aaa()
    print a.Getaaa()
      

if __name__ == "__main__":
    main()
        
B.py

Code: Alles auswählen

import A
class Bb():
    def Bbb(self):
        a=A.Aa()
        a.Aaa()
        self.bbb=a.Getaaa()
        print self.bbb
        
def main():
    b=Bb()
    b.Bbb()
    
if __name__ == "__main__":
    main()
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

sea-live hat geschrieben:ich weios schonn warumm bei mir in der firma alle mit BASCOM arbeiten
da ist eine variable immer fest im speicherregister verankert und kann von überall ausgelesen werden
bei OOP ist jedes modul jede klasse und jede instanz eigenständig
sogar jede objektvariable ist unikat
Nur weil Programmierer ein Konzept nicht verstehen, oder nicht benutzen wollen, heißt es noch lange nicht, dass das Konzept schlecht ist. Unter Umständen kann man daraus auch auf die Fähigkeiten der Programmierer schliessen ... ;-)

Du solltest die vielleicht vorher mal ein Buch über OOP antun, dann wird dir sicherlich einiges klar. Eines kannst du beispielsweise hier kostenlos runterladen. Über die Qualität des Buches an sich kann ich nichts sagen, da ich es nicht gelesen habe, aber einen halbwegs guten Einstieg wird es schon leisten.

Sebastian
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Du solltest die vielleicht vorher mal ein Buch über OOP antun, dann wird dir sicherlich einiges klar. Eines kannst du beispielsweise hier kostenlos runterladen.
Oder das Kapitel OOP aus einem Python-Buch der gleichen Reihe:
http://www.galileocomputing.de/openbook ... 31dbf0e3f7
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

danke danke dan nützt alles nichts wenn es keine globalen variablen gibt und

wenn da global vornedransteht
nur die interne methodenvariable geändert wird

inerhalb des def ist ales ok nur auserhalb hab ich immmer den eintrag den die erste datei hinter dem import stehen hat dieser wert wurde aber von ca 15 metoden geändert nur das das halt nur klassenintern oder auch nur methodenintern funktiniert und nicht modulübergreifend

Das pack ich schon
wenn der ingalt der variable nicht die position der dateien auf der HDD wäre wäre alles kein problem raus aus dem modul auf die HDD und das mächste modul holt die variablen wieder aus der log.txt

das problem ist das der user die log.txt in einem verzeichniss seiner wahl hat und ich diese verzeichniss den modulen irgend wie mitteilen muss

also alle 3-6module müssen wissen was der user im ersten modul für ein dateipfad angelegt hat

das steht im modul 1 hinter der import anweisungen als global pfad
und dann beginnen meine probleme
standart c:/irgendwas
user ändert im modul 1 auf d:irgendwas und setzt die 130 dateien dort ab durch druck auf button
button aus hauptmodul 1 aktiviert modul 2 modul1 MakeModal(false)

und dann geht nix mehr

irgerndwie gehts
ich hab das Programm Ausgelagert hier http://paste.pocoo.org/show/29948/

screenshot
Bild
Darkelf
User
Beiträge: 7
Registriert: Mittwoch 5. März 2008, 19:04

Hi sea-live,

bitte entschuldige, ich bin neu hier und habe zu deinem Problem nichts Produktives anzumerken - aber wenn ich deinen Screenshot sehe, wird mir kalt!
Von einem User zu fordern, Monate beginnend mit "00" für Januar einzugeben, ist ein Usability-Verbrechen! Was um alles in der Welt hindert dich daran, das Datum normal eingeben zu lassen und intern einfach 1 abzuziehen?
Wie gesagt, nix für ungut, geht mich auch nix an, aber ich konnte meinen Mund einfach nicht halten.

Schönen Abend noch
Darkelf
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

pütone hat geschrieben:
Du solltest die vielleicht vorher mal ein Buch über OOP antun, dann wird dir sicherlich einiges klar. Eines kannst du beispielsweise hier kostenlos runterladen.
Oder das Kapitel OOP aus einem Python-Buch der gleichen Reihe:
http://www.galileocomputing.de/openbook ... 31dbf0e3f7
Ja, das Kapitel gibt einen guten Überblick darüber, wie man es falsch macht. Schade dass die dahinter nicht geschrieben haben "Haha, war alles nur Spaß, hier wie man das in Python machen würde: ...".
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

Deshalb habe ich ja in weiser Vorraussicht ein allgemeines OOP-Buch empfohlen. Wenn man das verstanden hat, sollte die geringe Umstellung auf Python nicht mehr die Schwierigkeit sein.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Ja, das Kapitel gibt einen guten Überblick darüber, wie man es falsch macht. Schade dass die dahinter nicht geschrieben haben "Haha, war alles nur Spaß, hier wie man das in Python machen würde: ...".
Sorry, hätte nichts geschadet, wenn ich das Kapitel vorher mal gelesen hätte, bevor ich darauf verweise ... war mir nur spontan eingefallen beim Verweis auf das Openbook zur OOP.

Naja, dann wissen wir jetzt wenigstens, wo man nachlesen kann, wie man es nicht machen sollte.

@sea-live:
Es wäre wirklich hilfreich, wenn du dich wenigstens tendenziell an der deutschen Rechtschreibung orientieren könntest - das macht es wesentlich leichter, deine Postings zu lesen und auch zu verstehen.

In einem deiner ersten Postings in einem früheren Thread hast du geäußert, du wärest begeistert von Python. Geht mir auch so. Aber dann verstehe ich nicht, warum du dir nicht die Mühe machst, dich erstmal gründlich mit Python und auch dem OOP-Teil von Python zu beschäftigen, bevor du dich an Programme dieser Art und dieses Umfangs in einer für ich bis vor ca. 3 Wochen unbekannten Programmiersprache begibst.

Sicher, man kann auch ganz ohne OOP in Python programmieren (und gerade das macht es Umsteigern von der imperativen/prozeduralen Programmierung relativ leicht, zunächst einen guten Einstieg in Python zu finden), aber - und darauf wurdest du in einem anderen Thread schon hingewiesen - eine GUI-Anwendung ohne wirkliches Verständnis in die OOP zu programmieren ist nicht besonders sinnvoll.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

pütone hat geschrieben:Sorry, hätte nichts geschadet, wenn ich das Kapitel vorher mal gelesen hätte, bevor ich darauf verweise ... war mir nur spontan eingefallen beim Verweis auf das Openbook zur OOP.
Wir müssen echt mal eine Seite im Wiki zu guten Python-Büchern anlegen. Das Problem ist ja, dass die Leute die auf Amazon bewerten nicht immer wissen, das das was sie im Openbook lesen manchmal ziemlicher Quatsch ist. Dennoch hat sich das Buch in der deutschen Community zu einer Massenware für Newbies entwickelt was ich nicht sonderlich toll finde.

Eine Seite die gute Python-Bücher auflistet und sagt warum andere Bücher nicht so gut sind könnte IMHO gut helfen. pütone, du hast ja letztens scheinbar einige Einführungsbücher gelesen und kannst beurteilen ob sie aus sicher des Lernenden brauchbar sind und ob sie aus Sicht des Könnenden korrekt sind. Deine Hilfe wäre also gerne gesehen :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Leonidas hat geschrieben:Eine Seite die gute Python-Bücher auflistet und sagt warum andere Bücher nicht so gut sind könnte IMHO gut helfen.
Das wäre sicher hilfreich, denn es kommen ja doch öfter Fragen nach gedruckter deutschsprachiger Literatur. Bis es soweit ist, hilft vielleicht dem ein oder anderen dieser Link: http://www.way2python.de/pythonbuch/buecher.html
pütone, du hast ja letztens scheinbar einige Einführungsbücher gelesen und kannst beurteilen ob sie aus sicher des Lernenden brauchbar sind und ob sie aus Sicht des Könnenden korrekt sind. Deine Hilfe wäre also gerne gesehen
Naja, es waren genau drei, wobei ich das letzte noch nicht durch habe.
An Hilfsbereitschaft würde es nicht mangeln, die Sicht des Lernenden habe ich sicher, aber eben (noch ...) nicht die des Könnenden. Daran arbeite ich - mit eurer tatkräftigen Unterstützung - ja zur Zeit noch.

Dir würde z.B. gerade das von mir oben angepriesene Buch von M. Weigend vermutlich weniger gefallen, weil er konsequent von "Methoden" und "Attributen" spricht, statt alles "Attribute" zu nennen (da wäre Lutz/Ascher dann vorzuziehen). Auch verwendet Weigend konsequent file() statt open(), kennt noch keine Dekoratoren und behauptet, man könne Attribute (= Datenattribute) mittels __mydata sicher privatisieren - was so ja auch nicht stimmt.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Alles angekommen

Besserung in Aussicht
Die Hoffnung Stitbt zuletzt sagte mein OOP Prof man kann auch noch mit 50
OOp erlernen!

na dann mal fröhliches OOP !!

Danke der Hilfe!
Antworten