Assoziation, Objet aus einer Klasse erzeugen!!!

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
schnaki
User
Beiträge: 8
Registriert: Samstag 5. Juli 2008, 20:52

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Deine Hausaufgaben wird Dir hier sicher niemand machen. Schau doch mal ins Tutorial.
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Dann schau doch mal hier: http://Pythonwiki.de
schnaki
User
Beiträge: 8
Registriert: Samstag 5. Juli 2008, 20:52

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
schnaki
User
Beiträge: 8
Registriert: Samstag 5. Juli 2008, 20:52

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
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

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.
schnaki
User
Beiträge: 8
Registriert: Samstag 5. Juli 2008, 20:52

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
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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.
schnaki
User
Beiträge: 8
Registriert: Samstag 5. Juli 2008, 20:52

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
schnaki
User
Beiträge: 8
Registriert: Samstag 5. Juli 2008, 20:52

Ups habe das was vergessen zu erwähnen und zwar das mit dem Ausführen habe ich es so versucht:
" print repr sonja "
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

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`.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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
Zuletzt geändert von EyDu am Samstag 5. Juli 2008, 23:37, insgesamt 2-mal geändert.
schnaki
User
Beiträge: 8
Registriert: Samstag 5. Juli 2008, 20:52

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
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

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.
schnaki
User
Beiträge: 8
Registriert: Samstag 5. Juli 2008, 20:52

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??
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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]
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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
Antworten