Seite 1 von 1
Assoziation, Objet aus einer Klasse erzeugen!!!
Verfasst: Samstag 5. Juli 2008, 21:01
von schnaki
Hallo Leute,
ich bin wirklich ein Anfänger, und würde mich sehr freuen wenn einer von euch mir dabei hilft, und zwar:
Aufgabe-1: will allgemein zeigen wie eine Assoziation zwischen 2 Klassen in Python aussehen kann.
Aufgabe-2: wie kann man in Python ein Objekt aus einer Klasse erzeugen (inztanziieren).
Besten Dank im Voraus
Schnaki
Verfasst: Samstag 5. Juli 2008, 21:03
von EyDu
Deine Hausaufgaben wird Dir hier sicher niemand machen. Schau doch mal ins
Tutorial.
Verfasst: Samstag 5. Juli 2008, 21:06
von Pekh
Dann schau doch mal hier:
http://Pythonwiki.de
Verfasst: Samstag 5. Juli 2008, 21:06
von schnaki
Hallo, danke für den Typ, hab nicht erwartet das mir jemend die Aufgaben macht, will das verstehen, deswegen habe ich die Fragen auch konkret gestellet.
Nochmla danke für dein Typ und hoffe damit kann ich meine Aufgaben allein lösen
Verfasst: Samstag 5. Juli 2008, 21:49
von schnaki
EyDu hat geschrieben:Deine Hausaufgaben wird Dir hier sicher niemand machen. Schau doch mal ins
Tutorial.
Hallo,
kannst du mir dann bitte sagen, ob das was ich gerade gebastelt habe, die Objektserzeugung aus einer Klassen entspricht:
"
class mustermann:
def __init__(self, alter=15, name="Max", groesse = 180):
self.alter = alter
self.name = name
self.groesse = groesse
"
Also meine Klasse heißt "mustermann", und mein Objekt wird dann aus "alter", "name" und "groesse" erzeugt oder, habe ich das falsch verstanden??
Bin ein neuling in Sachen Programmieren, und will es wirklich lernen, daher wäre ich dir sehr dankbar wenn du mir den richtigen Weg zeigen würdest.
Besten Dank
Verfasst: Samstag 5. Juli 2008, 22:17
von Karl
1. Solltest du den Code in [code=py]CODE[/code] setzen und 2. die Einrückung beim Posten beibehalten
Naja, du hast zwar eine Klasse (die nach kurzem Überfliegen auch korrekt sein dürfte), aber kein Klassenobjekt (Instanz) der Klasse.
Du musst die Klasse aufrufen, also eine Instanz (Oder Klassenobjekt wie du sagtest) zu erzeugen:
instanz = mustermann()
Aber am Besten liest du dir nochmal etwas zu OOP durch, damit dir das alles klar wird.
Verfasst: Samstag 5. Juli 2008, 22:36
von schnaki
Karl hat geschrieben:1. Solltest du den Code in
setzen und 2. die Einrückung beim Posten beibehalten
Naja, du hast zwar eine Klasse (die nach kurzem Überfliegen auch korrekt sein dürfte), aber kein Klassenobjekt (Instanz) der Klasse.
Du musst die Klasse aufrufen, also eine Instanz (Oder Klassenobjekt wie du sagtest) zu erzeugen:
instanz = mustermann()
Aber am Besten liest du dir nochmal etwas zu OOP durch, damit dir das alles klar wird.
Danke für die Antwort
Verfasst: Samstag 5. Juli 2008, 22:47
von DasIch
Mal jetzt abgesehen von der Aufgabe:
Die Klasse nennst du Mustermann wieso?
Die Klasse repräsentiert nur eine einzige Person. Dann solltest du die Klasse einfach genauso nennen, `Person`. So wirkt das etwas verwirrend weil die Person jede beliebige sein kann. Selbst wenn die Klasse ursprünglich eine Familie repräsentieren sollte wäre Mustermann nicht wirklich richtig weil es eben jede beliebige Familie sein kann.
Solche Namen solltest du imho erst bei der Instanz verwenden.
Verfasst: Samstag 5. Juli 2008, 23:15
von schnaki
So jezt habe ich das da gebastelt (dank eure Tips...THX):
Code: Alles auswählen
>>> class person:
def __init__(self, alter=17, name= "Max"):
self.alter = alter
self.name = name
>>> def __repr__(self):
return self.__class__.__name__ + "(%r, %r)" % (self.alter, self.name)
>>> sonja=person(20,"Sonja")
Ich verstehe nicht so ganz was "(%r, %r)" genau macht? Kann mir jemend sag was es macht bitte?
Außerdem wenn ich den Code ausführe bekomme ich das hier:
eigentlich dachte ich ich werde als Ergebnis ==> person(20, "Sonja")
oder?
Danke nochmal für eure TIPPS
Verfasst: Samstag 5. Juli 2008, 23:21
von schnaki
Ups habe das was vergessen zu erwähnen und zwar das mit dem Ausführen habe ich es so versucht:
" print repr sonja "
Verfasst: Samstag 5. Juli 2008, 23:24
von Pekh
Auch im Interpreter mußt du korrekt einrücken. Die Methoden in deiner Klasse müssen stärker eingerückt sein als das Schlüsselwort `class`.
Verfasst: Samstag 5. Juli 2008, 23:33
von EyDu
Die Einrückung ist so schon korrekt, zumindest wenn schnaki IDLE verwendet. Allerdings darfst man keine Leerzeilen einfügen, wenn man sich im interaktiven Modus befindet. Wenn du mit Klassen hermuspielst ist es vielleicht von Vorteil, den Code zu speichern und dann ausführst.
Edit:
Code: Alles auswählen
class person:
def __init__(self, alter=17, name= "Max"):
self.alter = alter
self.name = name
def __repr__(self):
return self.__class__.__name__ + "(%r, %r)" % (self.alter, self.name)
sonja=person(20,"Sonja")
print sonja
Verfasst: Samstag 5. Juli 2008, 23:34
von schnaki
Pekh hat geschrieben:Auch im Interpreter mußt du korrekt einrücken. Die Methoden in deiner Klasse müssen stärker eingerückt sein als das Schlüsselwort `class`.
Sorry aber das habe ich jetzt nicht so ganz verstanden, was meinst du mit: "Die Methoden in deiner Klasse müssen stärker eingerückt sein als das Schlüsselwort `class`"??
Danke
Verfasst: Samstag 5. Juli 2008, 23:37
von Karl
schnaki hat geschrieben:Pekh hat geschrieben:Auch im Interpreter mußt du korrekt einrücken. Die Methoden in deiner Klasse müssen stärker eingerückt sein als das Schlüsselwort `class`.
Sorry aber das habe ich jetzt nicht so ganz verstanden, was meinst du mit: "Die Methoden in deiner Klasse müssen stärker eingerückt sein als das Schlüsselwort `class`"??
Danke
Er meint, dass du nicht richtig eingerückt hast, denn __repr__ ist bei dir eine eigenständige Funktion und gehört nicht zur Klasse.
Wenn du Klassen schreiben willst, empfiehlt sich auch, den Editor anstatt die Shell zu benutzen.
Verfasst: Samstag 5. Juli 2008, 23:37
von schnaki
OKAY Leute Danke euch, ihr seid spitze!!
Das mit dem zwischen speichern werde ich jetzt versuchen, hoffentlich klappt es.
Aber was ich immer noch nicht verstanden habe ist: was macht "(%r,%r)"?? Könnt ihr mir bitte das erklären??
Verfasst: Samstag 5. Juli 2008, 23:40
von EyDu
schnaki hat geschrieben:Aber was ich immer noch nicht verstanden habe ist: was "(%r,%r)"?? Könnt ihr mir bitte das erklären??
[wiki]String-Formatter[/wiki]
Verfasst: Sonntag 6. Juli 2008, 12:31
von numerix
schnaki hat geschrieben:Sorry aber das habe ich jetzt nicht so ganz verstanden, was meinst du mit: "Die Methoden in deiner Klasse müssen stärker eingerückt sein als das Schlüsselwort `class`"??
Dir fehlen ganz offensichtlich noch wesentliche Grundlagen von Python, die du dir durch eigenständige Lektüre eines geeigneten Tutorials zunächst mal
aneignen solltest.
Für "Klassen" z.B. das hier (veraltete Fassung, aber dafür auf deutsch und für die Basics aktuell genug; später kannst du ja noch die englische Fassung zur aktuellen Python-Version lesen ...):
http://starship.python.net/crew/gherman ... ode11.html