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

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()
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hallo gast,

das kann auch nicht gehen. Durch die Definition der Methoden alter, geschlecht und zustand überschreibst Du die Attribute gleichen Namens. Danach weist Du dem Objekt hans wieder die Attribute alter, geschlecht und zustand 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

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

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

gibt es eigentlich einen chat ?
Gast

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

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

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

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

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 ?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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

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

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

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

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.
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Anonymous hat geschrieben:geht mir eher um eine fehlende ordentliche befehlsreferenz
Hi. Wenn ich das richtig verstehe, meinst du die eingebauten Befehle? Denn die statements sind ja im Tutorium behandelt. Dann wirst du nicht darum kommen, dir mal einige Module aus dem Modul Index bei den Python Docs anzuschauen, hier wiederum zuallererst die __builtins__ (wichtige weitere Module sind dann ja noch os,sys,re und time, dann bist du schon gut bedient und kannst einen Großteil von Python). Allerdings sollten davon auch einige im Tut erwähnt sein und in den Rest sollte man sich nach und nach einarbeiten
Gast

ok, das reicht für heute abend und morgen früh :-)
Niels

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.

Na na na,

schäbig ist es die Methoden einfach so zu benennen, wie Du es getan hast. Aus einem guten Methodenname geht auch n bissl hervor, was die Methode macht.

z.B. getAlter(self), getAlter(self, neuesalter), printAlter(self)

;-)

Grüsse, Niels
Mars
User
Beiträge: 10
Registriert: Freitag 14. Mai 2004, 16:29

Bei meinem Python unter Windows war eine CHM-Hilfe-Datei dabei, die sehr gut zum Recherchieren geeignet ist. Bei http://pydoc.org/ kann man sehr gut online die Dokumentaion durchsuchen. Und bei der Python Quick Reference gibt's jede Menge Nachschlagematerial auf einer Seite.

Ich finde, Python ist ausgezeichnet dokumentiert.
Antworten