Spiele ohne Klassen

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
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

Hallo,

Definition einer Funktion:

Code: Alles auswählen

def addiere(a, b)
    c = a + b
    return c
Über die Argumente a und b werden an die Funktion addiere zwei Werte übergeben. Diese Funktion addiert die zwei Werte und liefert das Ergebnis. Nur wenn der Funktion die Argumente übergeben werden, kann die Funkion mit den Argumenten auch etwas machen. Nur so sind sie der Funktion bekannt. Alles andere drumherum sieht die Funktion nicht und kann auch nicht darauf zugreifen (es gibt ein paar Ausnahmen aber die sollen hier mal Nebensache sein)

Bei den Methoden (Funktionen) eines Objekts (ein Objekt wird oft auch als Klasse bezeichnet) ist es im Prinzip nicht anders. Der Methode wird hier aber nicht nur ein Wert übergeben sondern gleich ein ganzes Objekt nämlich das Objekt "self". Wobei "self" sich innerhalb eines Objektes immer auf sich selber (das Objekt selber) bezieht.

Code: Alles auswählen

class beispiel(object):

    #mit der Methode __init__ wird das Objekt "beispiel" erzeugt. In diesem Fall erbt "beispiel" 
    #von einem Standardobjekt namens "object" des Interpreters (denk nicht drüber nach, es sollte 
    #einfach so gemacht werden. Hier sind wir schon beim Thema Vererbung). 
    #Das Objekt "beispiel" wird innerhalb des Objekts "beispiel" mit "self" angesprochen. Man kann 
    #also auch sagen, innerhalb des Objekts ist "beispiel" = "self".
    #Mit dem Erzeugen des Objekt wird gleichzeitig das "argument1" dem Attribut "self.a" und "argument2" 
    #dem Attribut "self.b" zugeordnet. Das Objekt "beispiel/self" besteht nun aus dem Attributen "self.a" und "self.b"
    
    def __init__(self, argument1, argument2)
        self.a = argument1
        self.b = argument2
        
    #hier wird die Methode "addiere" definiert. Der Methode wird das Objekt "self" 
    #übergeben. An das Objekt "self" sind die Attribute "self.a" und "self.b" gebunden 
    #und die Methode addiere kann die Attribute somit auch verwenden. Würde 
    #man "self" nicht übergeben, dann würde es zu einem Fehler kommen, weil der Methode
    #die Attribute "self.a" und "self.b" nicht bekannt sind. 
    
    def addiere(self)
        ergebnis = self.a + self.b
        return ergebnis
Zuletzt geändert von Anonymous am Donnerstag 28. Januar 2016, 15:55, insgesamt 2-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@bfm: Wobei das jetzt kein gutes Beispiel für eine Klasse ist, denn trotz ``class`` ist das ja immer noch im Grunde eine Funktion. Der typische „code smell“ halt wenn man nur eine `__init__()` und eine einzige weitere öffentliche Methode hat. Dann kann man es ziemlich oft einfach als Funktion schreiben, und das sollte man dann auch machen, denn die Klasse bringt keinen Mehrwert und das ist dann auch keine objektorientierte Programmierung.

Der Satz „ein Objekt wird auch oft als Klasse bezeichnet“ ist falsch. Alles was man in Python an einen Namen binden kann ist ein Objekt, also unter anderem Zahlen, Zeichenketten, Listen, Module, Funktionen, und Klassen. Und davon werden nur Klassen als Klassen bezeichnet. Alles andere wäre verwirrend. :-) Dementsprechend wird in der `__init__()` auch kein Objekt `beispiel` erzeugt, sondern die `__init__()` bekommt ein Objekt vom *Typ* `beispiel` (das bereits erzeugt wurde) und initialsiert dieses. Das `beispiel` und `self` nicht gleich sind, kann man auch ganz einfach prüfen: ``print beispiel == self`` gibt `False` aus. Richtig wäre ``print beispiel == type(self)``.
Benutzeravatar
noisefloor
User
Beiträge: 3853
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Was genau würdest Du an Literatur empfehlen!?
Bei freiesMagazin findest du bergeweise Rezension zu Python-Büchern, ein großer Teil ist von mir geschrieben (also die Rezension, nicht die Bücher ;-) ).

Das beste mir bekannt Python-Buch ist "Fluent Python" - ist aber keine Einsteiger-Literatur.

Ansonsten: ein Buch lesen und parallel "learning by doing". Ich selber haben am meisten gelernt, wenn ich konkret ein Projekt für mich bzw. für den eigenen Nutzen umgesetzt habe. So was ist IMHO wesentlich effektiver als irgendwelche Beispiele nachzuprogrammieren, die einen aber eigentlich gar nicht interessieren.

Und natürlich bei Bedarf hier im Forum posten und sich dann erzählen lassen, was so alles besser gemacht werden kann :-)

Gruß, noisefloor
BlackJack

@noisefloor: Der Tipp mit dem interessanten Projekt ist gut, aber der OP will Spiele programmieren und kommt mit Büchern nicht klar, die OOP anhand von Spieleprogrammierung erklären.
Antworten