PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : python verständnisproblem


con-ray
09.02.2010, 12:16
Hi @ all,
ich wollte Programmieren lernen und habe mir für den Einstieg Python ausgesucht. Programmiere nebenbei in der Schule noch C++.
Aber nun zum Problem ich habe mir 'A Byte of Python' geladen und arbeite das im Moment schritt für schritt durch.. aber nun bin ich bei Objektorientierter Programmierung angelangt und versteh es einfach nicht mehr.
Was ist der Unterschied zwischen Klassen und Definitionen? und wie funktioniert dieses Beispielscript?
#!/usr/bin/python
#objektvariablen.py

class Person:
'''Stellt eine Person dar.'''
bevoelkerung = 0
def __init__(self, name):
'''Inistialisiert die Daten dieser Person.'''
self.name = name
print '(Initialisiere %s)' % self.name
#wenn diese person erzeugt wird,
#traegt er zu bevoelkerung bei
Person.bevoelkerung += 1
def __del__(self):
'''Ich sterbe'''
print '%s verabschiedet sich' % self.name
Person.bevoelkerung -= 1
if Person.bevoelkerung == 0:
print 'Ich bin der Letzte.'
else:
print 'es gibt noch %d Leute' % Person.bevoelkerung
def saghallo(self):
'''Begruessung durch die Person
Das ist wirklich alles was hier geschiet'''
print 'Hallo mein Name ist %s' % self.name
def wieviele(self):
'''gibt aktuelle bevoelkerungszahl aus'''
if Person.bevoelkerung == 1:
print 'ich bin ganz allein'
else:
print 'Es gibt noch %d leute' % Person.bevoelkerung
swaroop = Person('Swaroop')
swaroop.saghallo()
swaroop.wieviele()

kalam = Person('Abdul Kalam')
kalam.saghallo()
kalam.wieviele()

swaroop.saghallo()
swaroop.wieviele()

Das Buch ist eigendlich echt zu Empfehlen aber an der Stelle komm ich einfach nicht weiter.
In dem Buch ist zwar eigendlich alles ganz gut erklärt aebr eben diese Erklärung will mir einfach nicht einleuchten.
Kann mir das mal jemand Noobsicher erklären? :D
Danke im vorraus
mfg
con-ray


szebi
10.02.2010, 22:24
Das ist die Welt der Objektorientierten Programmierung ;)

Eine Definition ist eine Funktion (dürfte dir geläufig sein).

Eine Klasse enthält im wesentlichen Variablen (Member genannt) und Funktionen/Definitionen (Methoden).
In C++ werden Klassen mit 'class' deklariert und Funktionen mit ihrem Rückgabewert.

Instanzen einer Klasse werden Objekte genannt, also durch
swaroop = Person('Swaroop')
swaroop ein Objekt, eine Instanz der Klasse Person.

Ich bin in Python noch sehr neu, aber ich versuchs mal.
(Zur Verwendung von self kann ich dir nicht helfen)

Ok, nun wie das Programm arbeitet:


class Person:
'''Stellt eine Person dar.'''
bevoelkerung = 0

1. Klasse wird definiert
2. Kommentare
3. Die Gesamtbevölkerung wird auf 0 gesetzt (Über statische Variablen weiß ich leider nichts)

def __init__(self, name):
'''Inistialisiert die Daten dieser Person.'''
self.name = name
print '(Initialisiere %s)' % self.name
#wenn diese person erzeugt wird,
#traegt er zu bevoelkerung bei
Person.bevoelkerung += 1

1. Der Konstruktor (ist eine Methode)
Beim Erstellen des Objektes müssen die beiden Parameter übergeben werden, die der Konstuktor verlangt.
2. Kommentar
3. Ausgabe, wird bei der initialisierung getätigt, d.h. wenn ein die Klasse instanziert wird (ein Objekt erstellt wird)
4./5. Erklärung für 6. ;)


def __del__(self):
'''Ich sterbe'''
print '%s verabschiedet sich' % self.name
Person.bevoelkerung -= 1
if Person.bevoelkerung == 0:
print 'Ich bin der Letzte.'
else:
print 'es gibt noch %d Leute' % Person.bevoelkerung

1. Destruktor
2. Kommentar
3. Ausgabe, wenn Destruktor aufgerufen wird, dh. die Instanz/das Objekt gelöscht (zerstört wird)
Die if sollte klar sein.


def saghallo(self):
'''Begruessung durch die Person
Das ist wirklich alles was hier geschiet'''
print 'Hallo mein Name ist %s' % self.name

1. Methode saghallo
Wird über eine Instanz/das Objekt aufgerufen
2./3. Kommentare
4. Ausgabe, bei Aufruf der Funktion


def wieviele(self):
'''gibt aktuelle bevoelkerungszahl aus'''
if Person.bevoelkerung == 1:
print 'ich bin ganz allein'
else:
print 'Es gibt noch %d leute' % Person.bevoelkerung

Sollte aufrund obiger Erklärungen klar sein


swaroop = Person('Swaroop')
swaroop.saghallo()
swaroop.wieviele()

1. Es wird eine Instanz der Klasse Person erstellt, der name wird hier übergeben. Es wird der Konstruktor aufgerufen.
2./3. Die Methoden werden aufgerufen

(Die 2 Codeblöcke überspringe ich)

Zum Ende des Programms, zerstört Python alle Variablen, um den RAM freizumachen. Bei der Löschung des Objekts wird natürlich der Destruktor aufgerufen.



Hoffe den Wald etwas gelichtet zu haben.

con-ray
15.02.2010, 14:21
Hoffe den Wald etwas gelichtet zu haben.

ja etwas :)
Danke für deine Mühe!
War schon am Verzweifeln aber naja der Weg ist Steinig :D

Aber was ist der unterschied zwischen der Funktion saghallo und den __init__;__del__ etc funktionen? Was machen die '__' da?
mfg
con-ray

foobarflu
15.02.2010, 16:04
Aber was ist der unterschied zwischen der Funktion saghallo und den __init__;__del__ etc funktionen? Was machen die '__' da?
mfg
con-ray
Das sind Konstruktor und Destruktor... die Unterstriche darum sind einfach eine Konvention, um Kollisionen bei der Namensgebung zu vermeiden.

con-ray
16.02.2010, 10:06
also sind das doch irgendwie vorgefertigte funktionen?!

AGGROStar1991
16.02.2010, 10:15
die gehörn da hin weil die Funktionen so heissen MÜSSEN .heisst aber nicht das die immer gleich sind ;)

szebi
16.02.2010, 17:32
__function__ () {} # spezial
__function () {} # privat
function () {} # public

Spezialmethoden werden bei Ereignissen (Instanzierung und Zerstörung) automatisch aufgerufen.
Konstruktor: __init__
Destruktor: __del__

private Methoden können nur innerhalb der Klasse aufgerufen werden. (Eine andere Methode ruft zB so eine Methode auf.

öffentliche Methoden sind für das Hauptprogramm sichtbar.

con-ray
17.02.2010, 17:55
ach so ist das :)
ich muss noch ne menge lernen :)

ich danke euch dreien für eure hilfe!

mfg
con-ray