erste schritte mit OOP

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.
Gast

erste schritte mit OOP

Beitragvon Gast » Montag 3. Mai 2004, 11:28

hallo

ich komme mit der hilfe gar nicht klar und finde auch sonst keine quelle wo man mal eben die richtige benutzung finden kann. habe dies aus einem tutorial nachgebastelt und nun rätsel ich seit gestern abend warum es nicht geht.

Code: Alles auswählen

class info:
    def __init__(self):
        self.alter=0
        self.geschlecht="x"
        self.zustand=""
        self.test=123
    def alter():
        print self.alter
    def zustand():
        print self.zustand
    def geschlecht():
        print self.geschlecht


hans=info()
hans.alter=123
hans.geschlecht="extremst maskulin"
hans.zustand="neuware"

hans.alter()
hans.geschlecht()
hans.zustand()
hans.test()
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Montag 3. Mai 2004, 12:36

Hallo gast,

das kann auch nicht gehen. Durch die Definition der Methoden [b]alter, geschlecht und zustand[b] überschreibst Du die Attribute gleichen Namens. Danach weist Du dem Objekt hans wieder die Attribute [b]alter, geschlecht und zustand[b] zu und überschreibst Dadurch die Metoden gleichen Namens.

Code: Alles auswählen

class info:
    def __init__(self):
        self.alter=0
        self.geschlecht="x"
        self.zustand=""
        self.test=123
    def p_alter():
        print self.alter
    def p_zustand():
        print self.zustand
    def p_geschlecht():
        print self.geschlecht
    def p_test():
        print self.test

hans=info()
hans.alter=123
hans.geschlecht="extremst maskulin"
hans.zustand="neuware"

hans.p_alter()
hans.p_geschlecht()
hans.p_zustand()
hans.p_test()


Gruß

Dookie
Gast

Beitragvon Gast » Montag 3. Mai 2004, 13:13

wenn ich jetzt noch jeder methode ein (self) anhänge, klappt es. allerdings finde ich das sehr schäbig, dass die namen nicht gleich sein dürfen, denn es handelt sich ja um je zwei grundverschiedene dinge. ansonsten ist python aber echt nett von der syntax her.
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Beitragvon Christopy » Montag 3. Mai 2004, 13:20

Anonymous hat geschrieben:allerdings finde ich das sehr schäbig, dass die namen nicht gleich sein dürfen, denn es handelt sich ja um je zwei grundverschiedene dinge


Na ja. Eben. Deswegen ist es ja eigentlich auch eine schlechte Idee beide gleich zu benennen. Du könntest bspw. Member-Variablen mit einem vorangestellten m_ benennen (wenn sie private sein sollen sogar __m_). Und Funktionen etwas aussagekräftiger benennen. Aus alter würde dann __m_alter und aus alter() dann set_alter() und get_alter(). Dann weiss man sofort was gemeint ist.
Gast

Beitragvon Gast » Montag 3. Mai 2004, 13:24

gibt es eigentlich einen chat ?
Gast

Beitragvon Gast » Montag 3. Mai 2004, 13:45

warum geht das nicht ?

Code: Alles auswählen

class info:
    def __init__(self):
        self.alter=0
    def set_alter(self,alter):
        self.alter=alter
    def get_alter(self):
        return self.alter

hans=info()

if hans.get_alter()==0:
    print "alter nicht gesetzt"
    if input("alter setzen ? Y/N \n >>")=="y":
        hans.set_alter(input("neues alter: "))
    else:
        print "dann halt nicht"
       
Christophy_ohne_login

Beitragvon Christophy_ohne_login » Montag 3. Mai 2004, 14:33

...raw_input() ist das was Du suchst...
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Montag 3. Mai 2004, 14:37

Anonymous hat geschrieben:wenn ich jetzt noch jeder methode ein (self) anhänge, klappt es. allerdings finde ich das sehr schäbig, dass die namen nicht gleich sein dürfen, denn es handelt sich ja um je zwei grundverschiedene dinge. ansonsten ist python aber echt nett von der syntax her.

sowohl Attribute als auch Methoden sind Objekte, und daher eben nicht grundverschieden!


Gruß

Dookie
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Montag 3. Mai 2004, 16:57

Christophy_ohne_login hat geschrieben:...raw_input() ist das was Du suchst...


Hi Vielleicht mal etwas klarer: input()==eval(raw_input()) . Soll heißen, mit raw_input werden generell nur Strings eingelesen. Mit input dagegen wird das Ergebniss immer softort ausgewertet, was zu Fehlern führen kann (iwe oben wenn du dann halt nicht "y" statt y eingibst) und andererseits eine große Sicherheitslücke ist (wenn man z.B. bei input sys.exit() eingibt, sofern sys importiert ist, oder ähnliches)

Milan
Gast

Beitragvon Gast » Montag 3. Mai 2004, 20:26

kann es sein, dass es keine vernünftige python referenz gibt ? ich musste den ganzen tag vergeblich suchen und mich schließlich bis ende kapitel 7 eines tutorials durchlesen, um soeben den befehl string.atoi() zu finden. hinzu kommt, dass der name mir nix sagt. ich kann mir sachen besser merken, dessen bedeutung ich kenne, zb val(str) - value von string, str(val) - string von value.... unter atoi kann ich mir nix vorstellen

bitte,bitte, WO ist die gut sortierte referenz ? der salat bei F1/library-reference kanns ja wohl nicht sein! das ist ein albtraum!

und noch einmal: gibt es einen #python chat ?
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Montag 3. Mai 2004, 20:38

string.atoi() braucht man seit Python 1.6 nicht mehr, int("123") tuts auch.
Eine Library-Referenz gibts unter http://www.python.org/doc/current/lib/lib.html

sehr hilfreich ist das Pythonscript pydoc Einfach "pydoc modulname" im Dosfenster eingeben und staunen ;)

python-chat wüsste ich keinen.

Gruß

Dookie
Gast

Beitragvon Gast » Montag 3. Mai 2004, 20:50

also das mit pydoc klappt nicht, oder ich mache es falsch (pydoc string).. und die referenz-url von dir, ist die schlechte die ich meine. schade eigentlich, dabei hat python wirklich sachen die mir gefallen.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Montag 3. Mai 2004, 20:53

Hi. Stopp, stopp, stopp... es gibt genügend Material zu Python im Internet. Für Einsteiger empfiehlt sich wohl zuallererst das Tutorium. Und als nächsten Schritt kannst du frei von der Dokuliste hier auswählen, die auf python.org frei rumsteht...

Außerdem ist dies keine schlechte Referenz, denn hier wird alles notwendige kurz vorgestellt (halt nur auf englisch, statt auf deutsch wie oben).
Zuletzt geändert von Milan am Montag 3. Mai 2004, 21:00, insgesamt 1-mal geändert.
Christopy
User
Beiträge: 131
Registriert: Montag 15. Dezember 2003, 22:39

Beitragvon Christopy » Montag 3. Mai 2004, 20:57

Eine gute Sache ist auch pyshelf mit Volltextsuche. Die build-in Funktionen sind Pflicht und immer zuerst zu durchsuchen. Die normale Dokumentation dürfte da gute Dienste liefern.
Für spezielle Probleme kann man auch mal im Kochbuch nachschlagen ;)
Zuletzt geändert von Christopy am Montag 3. Mai 2004, 21:00, insgesamt 1-mal geändert.
Gast

Beitragvon Gast » Montag 3. Mai 2004, 20:59

beim tutorial bin ich bei kapitel 8 (ist übrigens sehr gut!) und die anderen deutschen habe ich auch durch oder zumindest überflogen und ein englisches auch mal angelesen. geht mir eher um eine fehlende ordentliche befehlsreferenz. die ist einfach schlecht strukturiert.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder