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:

Code: Alles auswählen

<__main__.person instance at 0x00D60378>
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