Seite 1 von 1
erste schritte mit OOP
Verfasst: Montag 3. Mai 2004, 11:28
von 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()
Verfasst: Montag 3. Mai 2004, 12:36
von Dookie
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
Verfasst: Montag 3. Mai 2004, 13:13
von 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.
Verfasst: Montag 3. Mai 2004, 13:20
von Christopy
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.
Verfasst: Montag 3. Mai 2004, 13:24
von Gast
gibt es eigentlich einen chat ?
Verfasst: Montag 3. Mai 2004, 13:45
von 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"
Verfasst: Montag 3. Mai 2004, 14:33
von Christophy_ohne_login
...raw_input() ist das was Du suchst...
Verfasst: Montag 3. Mai 2004, 14:37
von Dookie
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
Verfasst: Montag 3. Mai 2004, 16:57
von Milan
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
Verfasst: Montag 3. Mai 2004, 20:26
von 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 ?
Verfasst: Montag 3. Mai 2004, 20:38
von Dookie
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
Verfasst: Montag 3. Mai 2004, 20:50
von 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.
Verfasst: Montag 3. Mai 2004, 20:53
von Milan
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).
Verfasst: Montag 3. Mai 2004, 20:57
von Christopy
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
Verfasst: Montag 3. Mai 2004, 20:59
von 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.
Verfasst: Montag 3. Mai 2004, 21:05
von Milan
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
Verfasst: Montag 3. Mai 2004, 21:09
von Gast
ok, das reicht für heute abend und morgen früh
Verfasst: Mittwoch 12. Mai 2004, 13:03
von 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
Verfasst: Samstag 15. Mai 2004, 15:42
von Mars
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.