Klasse und Instanzen...ich steh auf dem Schlauch

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.
Monsi
User
Beiträge: 23
Registriert: Mittwoch 4. Februar 2009, 10:29

Hallo,

ich brauche noch mal jemand, der den Knoten in meinem Kopf loesen kann. Ich habe jetzt das Kapitel "Klassen" begonnen und mir ist einfach nicht klar, wozu ich Klassen oder Instanzen letztendlich brauche. Und vor allem weiss ich nicht, was eine Instanz macht. Also wenn ich z.B. sage

Code: Alles auswählen

class Meldung:
    def __init__(self, einString):
        self.text = einString
    def druckEs(self):
        print self.text


dann habe ich eine Klasse definiert, die "Meldung" heisst.

Und

Code: Alles auswählen

m1=Meldung("Hello World")
ist dann eine Instanz von der Klasse "Meldung". Aber was mache ich dann damit? Ich habe gerade null Durchblick..dabei ist es sicher ganz einfach. Kann mir jemand (bitte in einfachen Worten) helfen?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Eine Klasse ist eine Zusammenfassung von Methoden und den zugehörigen Daten. Eine Klasse Auto hat zum Beispiel die Daten Höchstgeschwindigkeit, Beschleunigung, Bremskraft .. und die passenden Methoden: Beschleunigen, Bremsen, ...

Eine Instanz ist einfach nur ein Auto, wenn ich dem Beispiel mal folgen darf, dass sich dann eben so verhält wie die Klasse es beschreibt. Die Instanziierung hast du ja schon.
Was du damit machen kannst? Du kannst die Methoden der Klasse auf diese Instanz anwenden, in deinem Beispiel dann eben `m1.druckEs()'

Aber du scheinst das Konzept der OOP noch nicht verstanden zu haben. Mit Klassen modelliert man Objekte (s.o.), was du allerdings machst ist eine umständliche Kapselung von print bzw einer Funktion.
Im Forum geistern einige Threads zur OOP rum, benutz einfach mal die Suchfunktion.
Monsi
User
Beiträge: 23
Registriert: Mittwoch 4. Februar 2009, 10:29

Das Auto-Beispiel ist gut, das macht einiges klarer.
Aber du scheinst das Konzept der OOP noch nicht verstanden zu haben. Mit Klassen modelliert man Objekte (s.o.), was du allerdings machst ist eine umständliche Kapselung von print bzw einer Funktion.
Das war nicht meine Idee, das ist ein Beispiel aus einem Text entnommen, der mir eigentlich erklaren sollte, wie Klassen funktionieren.

Vielen Dank fuer das Beispiel!
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Aus welchem Text? Ich glaube der ist dann bzgl Python und OOP wegzuschmeissen ... zufällig das Galileo Openbook?

Und wenn das Buch dir diesen Programmierstil suggeriert, solltest du mal PEP 8 lesen: [wiki]PEP 8 (Übersetzung)[/wiki] http://www.python.org/dev/peps/pep-0008/
Monsi
User
Beiträge: 23
Registriert: Mittwoch 4. Februar 2009, 10:29

Das ist aus "Learning to program" von Alan Gauld, in der deutschen Uebersetzung.
Monsi
User
Beiträge: 23
Registriert: Mittwoch 4. Februar 2009, 10:29

Eigentlich gehe ich das Tutorial "Dive into Python" durch, aber da hatte ich Schwierigkeiten, so viele neue Begriffe bezueglich der Klassen auf einmal zu verstehen, deshalb hatte ich etwas auf Deutsch gesucht. Aber so langsam bekomme ich eine Idee davon, wofuer Klassen gut sind.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Monsi hat geschrieben:Ich habe gerade null Durchblick..dabei ist es sicher ganz einfach. Kann mir jemand (bitte in einfachen Worten) helfen?
Stell dir vor: Ein Stempel ist eine Klasse. Ein auf ein Papier gestempeltes Bild ist ein Exemplar*. Der Stempel beschreibt, wie alle Abbilder aussehen.

Anderes Beispiel: Du bist ein Exemplar der Klasse Mensch (nehme ich jedenfalls mal an). Menschen haben gewissen Eigenschaften. Sie essen und schlafen etwa, schreiben Forumsbeiträge oder kennen ihren Namen. Jedes Exemplar Mensch ist jedoch anders, hat einen anderen Namen und wenn Exemplar "Paul" etwas isst, dann hat Exemplar "Peter" immer noch Hunger und beide kann man von "Mary" unterscheiden.


* Das Ausrotten der falschen Übersetzung Instanz für das englische Wort "instance" - korrekt ist Exemplar - ist meine ganz persönliche Windmühle.

Stefan
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

* Das Ausrotten der falschen Übersetzung Instanz für das englische Wort "instance" - korrekt ist Exemplar - ist meine ganz persönliche Windmühle.
Könntest du das mal kurz erläutern? Ok, instance heißt auch Exemplar (gibt auch Sinn), aber ich sehe nicht, wieso der Begriff der Instanz komplett falsch sein sollte. (odge.de übersetzt instance mitunter auch mit Instanz).
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Instanz im Deutschen ist/war eine zuständige Stelle bei Behörden oder vor Gericht. Die andere Bedeutung ist erst in den letzten Jahren in die Sprache geschwappt. Wikipedia nennt z.B. einen Gruppenspezifischen Dungeon bei Online-Rollenspielen ebenfalls eine Instanz, was genauso falsch von "instance" übersetzt ist und eigentlich ein Exemplar bzw. eine Ausprägung einer Dungeon-Klasse oder eines prototypischen Dungeons meint.

Der Begriff ist ein falscher Freund.

Stefan
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Also ich habe (auf Wikipedia, unter Instanz (Informatik)) das gefunden:
Es gibt die Annahme, dass der heutige Sprachgebrauch „Ein Objekt ist eine Instanz einer Klasse“ auf einer Fehlübersetzung der englischen Bezeichnung „instance“ = „Beispiel“, „Auftreten“ oder „Fall“ beruht. Als Begründung dient die Beobachtung, dass Instanzen im juristischen Kontext zueinander immer in einem Über- oder Unterordnungsverhältnis liegen. Diese Annahme ist jedoch falsch. Die lateinische Wurzel „instantia“ = „das Daraufbestehen“ enthält keine solche Hierarchie von Instanzen untereinander. Vielmehr müssen Instanzen auf anderen Dingen bestehen, was Exemplare von Klassen tun (sie bestehen nämlich auf den Klassen). Auch Goethe benutzte „Instanz“ schon in der Bedeutung „Exemplar“: „Eine Instanz aus dem Tierreich der niedrigsten Stufe führen wir noch zu mehrerer Anleitung hier vor.“[1] Mithin ist diese Verwendung des Instanzbegriffes korrekt.
Instanz („abgeschlossene Einheit“, lat. instantia „das Daraufbestehen“)
Grade die Begrifflichkeit der "abgeschlossen Einheit" oder dem "Bestehen auf Etwas anderem" ergibt doch Sinn. Und ich habe unter Instanz auch immer derartiges verstanden, noch bevor ich mich intensiver mit Programmierung auseinandergesetzt habe. Aber ich war auch nie ein Freund davon, Begriffe, die inhaltlich Anderes bedeuten, in der nur von einst festgelegten Bedeutung zu benutzen, führt imho nur zu Neusprech.
BlackJack

@str1442: Auf der Diskussionseite finden sich auch Gegenstimmen:
Goethe war ohne Zweifel ein großer Dichter und Denker, aber als die geeignete Instanz zur Definition zeitgenössischen Sprachgebrauchs sollte er, wie man bereits an dem kurzen Text-Beispiel oben sieht, vielleicht eher nicht dienen (wer sagt denn schon: "zu mehrerer Anleitung ..."?). …
oder
Welchen Sinn hat der Absatz "Morphlogie" in diesem Artikel? Der gesamte Abschnitt trägt rein gar nichts zur Erklärung des Begriffs Instanz(Informatik) bei. Es wird nur eine persönliche Meinung widergegeben, ohne den geringsten Ansatz eines Beweises. Ich finde man sollte den Abschnitt rausnehmen. --solovej 16:01, 15. Sep. 2008 (CEST)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich werd weiterhin Instanzen verwenden, genauso wie ich von Frameworks und Toolkits sprechen werde. Bin kein sonderlicher Sprachpurist und bei Grafischen Benutzeroberflächen-Werkzeugkästen ist dann irgendwann die Grenze zur Lächerlichkeit überschritten (sagt hier irgendwer von euch etwa "schönfinkeln"?). Aber wenn jemand weitere tolle Begriffe zum Übersetzen will, wie wäre es mit diesen: Dependency Injection, Inversion of Control, RESTful, List Comprehension.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Leonidas hat geschrieben:(sagt hier irgendwer von euch etwa "schönfinkeln"?).
Ich ab heute =D

Ich verwende auch lieber deutsche Wörter, aber Framwork klingt einfach schöner als Rahmenwerk =/ Instanzen steht _überall_. Es macht es nicht richtiger, aber ... verbreiteter. Wobei ich bei Erklärungen auch lieber von Exemplar spreche ...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Man darf bei solchen Sprachdiskussionen niemals vergessen, dass Sprachen etwas dynamisches sind! Das umfasst neben der reinen Form von Wörtern eben auch die Bedeutung. Bestes Beispiel ist das alte deutsche Wort "geil" - in den 80ern kam dieses Wort irgend wie wieder auf, allerdings mit der Bedeutung "gut", "toll" usw - die ursprüngliche Bedeutung wurde also erweitert.

Insofern finde ich Wörter wie "Instanzen" durchaus passend - im Kontext des Programmierens ist die Bedeutung dann nämlich klar.

Anders formuliert: Wenn man konsequent falsch übersetzt, dann wird aus dem Fehler irgend wann einfach etwas Richtiges ;-) (Ok, war ein wenig überspitzt jetzt!)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Hyperion hat geschrieben:Anders formuliert: Wenn man konsequent falsch übersetzt, dann wird aus dem Fehler irgend wann einfach etwas Richtiges ;-) (Ok, war ein wenig überspitzt jetzt!)
Stimmt aber. Daher sprach ich ja von meiner persönlichen Windmühle. Ich habe ja auch noch nicht aufgegeben, auf dem richtige Verwendung von dem Genetiv zu dringen :)

Stefan
Monsi
User
Beiträge: 23
Registriert: Mittwoch 4. Februar 2009, 10:29

Um noch mal zur urspruenglichen Fragestellung zurueckzukehren: ich habe jetzt das Buch "Einfuehrung in Python" von Lutz & Asher zu Rate gezogen und so ganz allmaehlich wird mir klar, was Klassen und Instanzen/Exemplare sind und wozu das Ganze nuetzlich sein koennte. Was mich anfangs so sehr verwirrt hatte war unter anderem die Tatsache, das self konventionell eingesetzt wird. Mir war nicht klar, dass die meisten Begriffe bei der Definition der Methoden einer Klasse einfach willkuerliche Begriffe sind, die ich durch meine eigenen ersetzen kann, solange ich sie konsistent verwende.

Auch die Funktion von init wurde mir eben erst klar, obwohl ich mich schon mehrere Stunden damit befasst hatte. Im Nachhinein ist das immer so offensichtlich, aber wenn man noch keine Ahnung davon hat, finde ich es schwer sich das selbst beizubringen. Also koennte es gut sein, dass ich noch oefter nachfrage bei Dingen die fuer geuebte User anscheinend selbstverstaendlich sind.

Liebe Gruesse
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Monsi hat geschrieben:Was mich anfangs so sehr verwirrt hatte war unter anderem die Tatsache, das self konventionell eingesetzt wird. Mir war nicht klar, dass die meisten Begriffe bei der Definition der Methoden einer Klasse einfach willkuerliche Begriffe sind, die ich durch meine eigenen ersetzen kann, solange ich sie konsistent verwende.
Was meinst du denn damit? `self' ist keinesfalls eine Konvention, sondern Python benötigt es als Referenz auf die Klasse, um die Methoden richtig an die Instanzen(@sma: :P) zu binden.
`__init__' ist etwas komplizierter, aber bei Namen mit zweifach führenden und angehängten Unterstrichen, kann man davon ausgehen, dass damit ein spezieller Effekt erzielt wird. Vergleiche, Rechenoperationen usw.
Monsi hat geschrieben:Also koennte es gut sein, dass ich noch oefter nachfrage bei Dingen die fuer geuebte User anscheinend selbstverstaendlich sind.
Tu das. Man hilft hier gerne, aber wirf davor am besten einen Blick in die Dokumentation, denn das erzieht dich auch zur Selbsthilfe ;)

@Don Quixote: Ich sehe ein paar Riesen! :D Aber um mal ernst zu werden: Ist das nicht recht egal wie man etwas nennt, solange es so konsistent ist, dass keine Verwechslungen auftreten? Eigentlich müsste man vor allem in der Informatik, da sie ja wie keine andere Wissenschaft globalisiert ist, durchgängig die englischen Fachbegriffe benutzen (oder deutsche, französische, ... der Entdecker darfs benennen ;)).
Monsi
User
Beiträge: 23
Registriert: Mittwoch 4. Februar 2009, 10:29

`self' ist keinesfalls eine Konvention, sondern Python benötigt es als Referenz auf die Klasse, um die Methoden richtig an die Instanzen(@sma: Razz) zu binden
"The first argument of every class method is always a reference to the current instance of the class. By convention, this argument is always named self." (Pilgrim, "Diveintopython")

Ich meinte damit nur, dass ich statt:

Code: Alles auswählen

class FirstClass:
        def setdata(self, value):
                self.data=value
auch das hier:

Code: Alles auswählen

class FirstClass:
         def setdata(Instanz, Wert):
                 Instanz.data=Wert
schreiben koennte
farid
User
Beiträge: 95
Registriert: Mittwoch 8. Oktober 2008, 15:37

Leonidas hat geschrieben:Aber wenn jemand weitere tolle Begriffe zum Übersetzen will, wie wäre es mit diesen: Dependency Injection, Inversion of Control, RESTful, List Comprehension.
Wie wuerdest Du (oder eher sma) "List Comprehension" eindeutschen?

(Ich bin kein Freund uebermaessiger Eindeutschung von IT-Begriffen, aber die Frage nach einem deutschen Ausdruck fuer List Comprehension taucht immer wieder in Schulungen auf.)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

farid hat geschrieben:Wie wuerdest Du (oder eher sma) "List Comprehension" eindeutschen?
Da gab es mal einen Thread dazu. Am ehesten überzeugt mich die von Georg angesprochene ZF-Notation aber wenn deine Schulungen sich nicht an Haskell-Programmierer oder Mathematiker richten, dann wirst du mit Zermelo-Fraenkel eher zur Verwirrung beitragen.

Listenaussonderung klingt für mich, nunja - erstens etwas arg holprig und ganz ehrlich stelle ich mit unter Aussonderung etwas anderes als eine LC vor. Zudem eine LC nicht nur aussondert sondern sowohl ``filter`` als auch ``map`` vereint. Listenausdruck ist dann wiederrum so generell, das er eigentlich keine Aussage hat.
farid hat geschrieben:(Ich bin kein Freund uebermaessiger Eindeutschung von IT-Begriffen, aber die Frage nach einem deutschen Ausdruck fuer List Comprehension taucht immer wieder in Schulungen auf.)
Nun, bei dieser Frage würde ich zugeben dass es keine brauchbare deutsche Übersetzung gibt die nicht haarsträubend ist. Ich denke an dieser Stelle würde ich dann eher auf den Begriff List Comprehension eingehen. Warum 'List' ist klar, aber wenn man 'Comprehension' erklärt bleibt das Leuten wohl besser im Kopf als irgendein deutscher Begriff unter dem entweder ein Mathematiker (ZF) oder niemand (restliche Vorschläge) sich etwas vorstellen kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten