OOP Sprachgebrauch - Wie sagt man es richtig?

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

Drei Fragen dazu:

Im Python-Tutorial kann man nachlesen, dass alles, was mit einem Punkt an ein Objekt angehängt wird, "Attribut" heißt.
Außerhalb der Python-Welt scheint es aber doch eher üblich zu sein, nur bei Datenattributen von Attributen und bei Methodenattributen schlicht von Methoden zu sprechen. Rein vom dt. Sprachgebrauch her halte ich letzteres auch für naheliegender, weil Attribut ja doch eher eine Eigenschaft bezeichnet, wohingegen Methode etwas mit Tätigkeit zu tun hat.

Wie machen das nun die richtigen Pythonianer (ich will ja erst noch einer werden ...)?

UND (das betrifft jetzt aber nicht Python speziell): Heute habe ich beim Lesen eines Python-Buches mittlerweile die vierte (mindestens) Schreib-/Sprechweise für den Vorgang der "Instanzbildung" gelesen und allmählich wüsste ich gerne, was denn nun korrekt ist:
instanziieren
instantiieren
instantisieren
instanzieren

UND: Im OOP-Sprachgebrauch wird ja "Objekt" häufig synonym zu "Instanz einer Klasse" gebraucht. Da in Python - wenn ich es richtig verstanden habe - aber nahezu alles ein Objekt ist - auch "Dinge", die nicht als Instanz einer Klasse entstanden sind - , ist es da nicht vernünftig, in Python Instanzen einer Klasse eher nicht als Objekt, sondern als Instanz zu bezeichnen, um dadurch eindeutig zum Ausdruck zu bringen, um welche Art von Objekt es sich handelt?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

pütone hat geschrieben:Im Python-Tutorial kann man nachlesen, dass alles, was mit einem Punkt an ein Objekt angehängt wird, "Attribut" heißt.
Außerhalb der Python-Welt scheint es aber doch eher üblich zu sein, nur bei Datenattributen von Attributen und bei Methodenattributen schlicht von Methoden zu sprechen. Rein vom dt. Sprachgebrauch her halte ich letzteres auch für naheliegender, weil Attribut ja doch eher eine Eigenschaft bezeichnet, wohingegen Methode etwas mit Tätigkeit zu tun hat.
In Python gibt es aber keine Datenattribute oder irgendwelche anderen Attribute. Alle Attribute sind gleich, daher ist es sinnvoll von Attributen zu sprechen. Einige dieser Attribute sind "callable", aber das macht eigentlich keinen Unterschied, da Funktionen in Python sowieso immer höherer Ordnung sind und sich daher genau so wie andere, nicht "callable" Attribute verhalten. Sie haben sogar einen Typ :) Du kannst natürlich die beiden unterschiedlich benennen, aber letztendlich ist es nur eine künstliche Unterscheidung.
pütone hat geschrieben:UND: Im OOP-Sprachgebrauch wird ja "Objekt" häufig synonym zu "Instanz einer Klasse" gebraucht. Da in Python - wenn ich es richtig verstanden habe - aber nahezu alles ein Objekt ist - auch "Dinge", die nicht als Instanz einer Klasse entstanden sind - , ist es da nicht vernünftig, in Python Instanzen einer Klasse eher nicht als Objekt, sondern als Instanz zu bezeichnen, um dadurch eindeutig zum Ausdruck zu bringen, um welche Art von Objekt es sich handelt?
Was ist denn in Python keine Instanz einer Klasse? Eine Klasse ist die Instanz ihrer Metaklasse, falls du das im Hinterkopf hast. Auch None ist die Instanz einer Klasse. Und was nicht eine Instanz einer Klasse ist, ist in Python auch kein Objekt - also die Keywords zum Beispiel.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Leonidas schreibt:
In Python gibt es aber keine Datenattribute oder irgendwelche anderen Attribute. Alle Attribute sind gleich, ...
Ich zitiere dazu aus dem Python-Tutorial:
9.4 Random Remarks
Data attributes override method attributes with the same name ...
Das passt dann für mich aber nicht zusammen.
BlackJack

Das ist dann halt die etwas kürzere Schreibweise für: "Attribute die ein Datum enthalten, dass keine Methode dieser Klasse sein muss, überschreiben Attribute die Methoden dieser Klasse sind und den selben Namen haben…"

Da auf Objekten alles Attribut ist und Klassen auch Objekte und Instanzen ihrer Metaklassen sind, stell Dir doch einfach mal vor man würde nicht diese ungenauen Verallgemeinerungen machen, sondern immer alles ganz korrekt ausformulieren. Dann würde niemand mehr die Doku lesen wollen. ;-)

Die "harte" Unterscheidung Daten-Attribute und Methoden ausserhalb der Python-Welt kommt aus der Welt der Sprachen, bei denen Klassen und Methoden statischer Code sind und Instanzen und Daten-Attribute im Gegensatz dazu zur Laufzeit verändert werden können. In Python sind auch Klassen Instanzen, und die Methoden verhalten sich zur Laufzeit wie Daten-Attribute: Man kann sie abfragen, herumreichen und sogar verändern. In Python ist diese Grenze also verwischt.

Zur "instanzieren"/… Frage: Das Wort gibt's im Deutschen eigentlich nicht, sowie "Instanz" eine im Grunde falsche Übersetzung von "instance" ist. Das meint im englischen nämlich "Exemplar" oder "Beispiel" und nicht die Instanz. Ein Grund warum ich zum Exemplar einer Klasse eher Objekt sage, statt "Instanz". Das ist wenigstens nicht ganz so falsch.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

pütone hat geschrieben:Ich zitiere dazu aus dem Python-Tutorial:
9.4 Random Remarks
Data attributes override method attributes with the same name ...
Das passt dann für mich aber nicht zusammen.
Es gewinnt das, was zuletzt definiert wird:

Code: Alles auswählen

>>> class Demo(object):
...     def __init__(self):
...         self.data_arg = 'Attribut'
...     def post_init(self):
...         self.data_arg = self.method
...     def method(self):
...         return 'Methode'
... 
>>> d = Demo()
>>> d.data_arg
'Attribut'
>>> d.post_init()
>>> d.data_arg()
'Methode'
>>> 
Was das Tutorial meint ist folgendes:

Code: Alles auswählen

>>> class Demo2(object):
...     def __init__(self):
...          self.data_arg = 'Attribut'
...     def data_arg(self):
...          return 'Method'
... 
>>> d2 = Demo2()
>>> d2.data_arg
'Attribut'
Das ist aber auch ganz logisch. Zuerst wird die Methode ``data_arg`` definiert, denn du kannst auf sie bereits in ``__init__`` zugreifen. Danach wird in ``__init__`` die Methode mit einem String überschrieben. Das ist eben das "override". Es wird beides definiert, nur das letze gewinnt eben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

BlackJack hat geschrieben:Zur "instanzieren"/… Frage: Das Wort gibt's im Deutschen eigentlich nicht, sowie "Instanz" eine im Grunde falsche Übersetzung von "instance" ist. Das meint im englischen nämlich "Exemplar" oder "Beispiel" und nicht die Instanz.
Diese Problematik war mir bewusst. Aber irgendwie muss ich die Sache ja auch im Deutschen richtig ausdrücken können müssen.
BlackJack hat geschrieben: Ein Grund warum ich zum Exemplar einer Klasse eher Objekt sage, statt "Instanz". Das ist wenigstens nicht ganz so falsch.
Aber wie beschreibst du den Vorgang der Instanzbildung?
"Objektifizieren" wirst du ja sicher nicht sagen.

UND: Gerade in Python, wo eben auch Klassen selbst Objekte sind, bekommt man dann eine sprachliche Ungenauigkeit, wenn man von Klassenobjekten spricht, weil nicht mehr klar ist, ob man das Exemplar einer Klasse oder die Klasse als Objekt meint. Da ist Klasseninstanz doch eindeutiger, oder nicht?

Und dann nochmal zu den Attributen: Ich denke ich habe verstanden, warum Attribute in Python Attribute sind - und eben NUR Attribute. Aber wäre es nicht dennoch sinnvoll, den außerhalb von Python üblichen (?) Sprachgebrauch zu verwenden, um sich mit anderen klarer verständigen zu können?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

pütone hat geschrieben:Und dann nochmal zu den Attributen: Ich denke ich habe verstanden, warum Attribute in Python Attribute sind - und eben NUR Attribute. Aber wäre es nicht dennoch sinnvoll, den außerhalb von Python üblichen (?) Sprachgebrauch zu verwenden, um sich mit anderen klarer verständigen zu können?
Also quasi so zu tun als gäbe es in Python so eine Trennung die es nicht gibt? Ich sehe da keinen Vorteil darin. Python ist eben eine eigenständige Sprache, mit eigenständigen Features. Wenn man anfangen würde, alle Python-Features so zu umschreiben, dass auch Java-Programmierer es verstehen ist den java-Programmierern geholfen, den Python-Programmierern geschadet, weil dann die Nomenklatur, hmm, "degeneriert", also verschiedene Begriffe das gleiche bedeuten. Oder andersrum, dass der gleiche Begriff verschiedene Bedeutungen haben kann.

Außerdem, List Comprehensions? Deskriptoren? Dekoratoren? Das in Java-Sprache zu übersetzen wird hart.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@pütone: Die "Instanzbildung" beschreibe ich mit "ein Objekt erzeugen" statt "ein Objekt instanziieren". Bei "erzeugen" weiss ich auch immer auf Anhieb wie man's schreibt und bin bei der Schreibweise auch recht konsequent. Um mal meinen ehemaligen Deutsch-Lehrer zu zitieren «Wenn man nicht weiss wie "Portemonnaie" geschrieben wird, verwendet man halt "Geldbörse"» ;-)

Ich bin dann auch gerne mal ungenau wenn ich zum Beispiel von einem `Foo`-Objekt spreche und damit nicht die `Foo`-Klasse meine, sondern Objekte vom Typ `Foo`. Wenn ich die Klasse selbst meine, dann: `Foo`-Klasse.

Bei den Attributen wird auch bei Python in gewissen Grenzen der in anderen Sprachen übliche Sprachgebrauch verwendet, weil die Unterscheidung zwischen "Methoden" und "anderen Daten" schon wichtig ist. Es ist halt nur wichtig zu erkennen, dass das eine Kopf- und Konventionssache ist, und keine technische Trennung wie zum Beispiel in Java. Was dazu führt, das z.B. viele Java-Programmierer über diese künstliche Trennung noch nie nachgedacht haben, das ist halt so und geht ja auch nicht anders. Aber die glauben ja auch, das OOP ohne Klassen nicht geht. :-)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Ich muss mich gerade mal selbst zitieren ...
pütone hat geschrieben: Heute habe ich beim Lesen eines Python-Buches mittlerweile die vierte (mindestens) Schreib-/Sprechweise für den Vorgang der "Instanzbildung" gelesen und allmählich wüsste ich gerne, was denn nun korrekt ist:
instanziieren
instantiieren
instantisieren
instanzieren
BlackJack hat mittlerweile ja erläutert, warum und wie er es schafft, keinen dieser vier Begriffe zu verwenden. Fand ich auch hilfreich.

ABER: Ich will es immer noch wissen! Einige von euch haben doch OOP an der Uni gelernt (schätze ich mal): Was sagen die denn da? Oder vielleicht gibt es einen Linguisten unter euch, der aus sprachwissenschaftlicher Sicht da etwas Erhellendes sagen kann.
Leonidas hat geschrieben: Also quasi so zu tun als gäbe es in Python so eine Trennung die es nicht gibt? Ich sehe da keinen Vorteil darin. Python ist eben eine eigenständige Sprache, mit eigenständigen Features. Wenn man anfangen würde, alle Python-Features so zu umschreiben, dass auch Java-Programmierer es verstehen ist den java-Programmierern geholfen, den Python-Programmierern geschadet, weil dann die Nomenklatur, hmm, "degeneriert", also verschiedene Begriffe das gleiche bedeuten. Oder andersrum, dass der gleiche Begriff verschiedene Bedeutungen haben kann.

Außerdem, List Comprehensions? Deskriptoren? Dekoratoren? Das in Java-Sprache zu übersetzen wird hart.
Das letzte trifft m.E. nicht (mehr) den Punkt. Es geht ja nicht darum, Worte für Sprachelemente zu finden, die es in dieser Art gar nicht gibt, sondern den Sprachgebrauch so zu wählen, dass er sich möglichst einfügt in einen schon bestehenden Sprachgebrauch, mittels dem man sich per Konvention ganz gut - programmiersprachenübergreifend - verständigen kann.

Ein Lösung könnte doch z.B. (gewesen) sein, statt den Begriff "Attribut" als Oberbegriff für das zu verwenden, was man in anderen Programmiersprachen als Attribute und Methoden unterscheidet, dafür einen neuen Begriff zu verwenden - da kann ja mal kreativ sein (ich mache jetzt mal lieber keinen Vorschlag, sonst wird der mir in Kürze um die Ohren gehauen ...). Dadurch hätte man zumindest vermieden, dass ein und derselbe Begriff "Attribut" in Python eine andere Bedeutung hat als in anderen OOP-Sprachen, ohne die Eigenart von Python aufgeben zu müssen.
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Ich weiß nicht, wo du da das Problem siehst. Eine Methode ist eine Methode auch in Python und ein Attribut ein Attribut. Das eine Methode gleichzeitig auch ein Attribut ist - ok, aber das heißt nicht, dass man eine Methode immer Attribut nennen muss.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

pütone hat geschrieben:Es geht ja nicht darum, Worte für Sprachelemente zu finden, die es in dieser Art gar nicht gibt, sondern den Sprachgebrauch so zu wählen, dass er sich möglichst einfügt in einen schon bestehenden Sprachgebrauch, mittels dem man sich per Konvention ganz gut - programmiersprachenübergreifend - verständigen kann.
Ich finde, dass man sich da dennoch ganz gut verständigen kann. Denn Methode versteht man in Python ja auch, nur eben als Sonderfall eines Attributes.
pütone hat geschrieben:Ein Lösung könnte doch z.B. (gewesen) sein, statt den Begriff "Attribut" als Oberbegriff für das zu verwenden, was man in anderen Programmiersprachen als Attribute und Methoden unterscheidet, dafür einen neuen Begriff zu verwenden - da kann ja mal kreativ sein (ich mache jetzt mal lieber keinen Vorschlag, sonst wird der mir in Kürze um die Ohren gehauen ...). Dadurch hätte man zumindest vermieden, dass ein und derselbe Begriff "Attribut" in Python eine andere Bedeutung hat als in anderen OOP-Sprachen, ohne die Eigenart von Python aufgeben zu müssen.
Ja, aber neue treffende Begriffe einzuführen ist nicht ganz einfach, denn die müssen ja erst von den Leuten akzeptiert werden. Attribut bezeichnet es ja schon ganz gut: als Daten die einer Klasse zugeordnet sind. Methoden sind nur in Python-Sicht auch Daten einer Klasse (und eigentlich ist das ja auch nur logisch), also ist der Begriff aus Python-Sicht sehr treffend.

Es steht dir ja frei von Attributen und Methoden zu sprechen (ich werfe sogar noch die bound und unbound methods ein), nur ist das dann einfach Konvention und keine technische Maßnahme. Ich habe sicher auch schon öfters von Methoden in Python gesprochen, fühle mich jetzt aber kein bisschen schuldig ;) Von Attributen zu sprechen ist dann am meisten sinnvoll, wenn man die Methoden in Klassen überschreibt oder wie "Variablen" betrachtet, dann fühlt es sich nicht wie ein Bruch im Konzept an, sondern ist konsistent.

Letztendlich muss ich sagen, dass das für mich eine eher wenig relevante Angelegenheit ist - es ist nur ein Name. Was ich wichtiger finde ist, dass OOP nicht eine kanonische Ausprägung hat (und diese von Java implementiert wird), sondern das OOP in verschiedenen Sprachen verschieden aussehen kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@pütone: Der Prof, der bei mir damals im zweiten Semester OOP mit Java eingeführt hat, hat das mit der "Nichtübersetzung" von "instance" erklärt, und soweit ich mich erinnern kann, auch immer recht konsequent Objekt, Exemplar, oder Ausprägung zu "Instanzen" gesagt.

Ich denke der letzte Absatz von Leonidas' Beitrag beschreibt's ganz gut: Man kann OOP mit vielen verschiedenen Begrifflichkeiten erklären und auch die Semantik kann durchaus verschieden sein. Du musst einfach nur mal über den Tellerrand von C++/Java/C# hinaus schauen und Du wirst noch viel mehr Bezeichnungen und unterschiedliche Implementierungen vom OOP-Konzept finden, die man begrifflich einfach nicht unter einen Hut bekommt.

In einigen Sprachen werden (Daten)Attribute und Methoden technisch unterschieden, in anderen nicht. Es gibt solche bei denen Objekte nur Methoden haben und Daten etwas internes sind. Oder welche wo es ausschliesslich Objekte gibt, denen man Nachrichten schicken kann, wobei die Nachrichten selbst wieder Objekte sind. Oder welche wo man die Methoden im Sprachgebrauch nicht Objekten zuordnet sondern zu generischen Funktionen (so'ne Art Funktionssignatur) hinzufügt.

Bei denen allen eine gemeinsame, eindeutige Begriffswelt zu etablieren ist nahezu unmöglich. Schlimmer noch, man müsste viele neue Begriffe erfinden, weil man tunlichst vermeiden sollte den gleichen Begriff in zwei Sprachen mit unterschiedlichen Konzepten oder Ideen zu belegen. Man dürfte dann zum Beispiel nicht Klasse zu den Klassen in Python und Java sagen. Wenn man allerdings ständig neue Worte erfindet, ist die Kommunikation ja noch schlechter, weil die eine Seite die andere nicht einmal ansatzweise versteht, ohne in eine völlig neue Begriffswelt ein zu tauchen.

Wer soll ausserdem entscheiden wessen Bezeichnungen "richtig" sind und bleiben dürfen und welche durch neue ersetzt werden. Warum sollte man in Python das "Attribut" umbenennen, warum nicht in Java? (Info am Rande: Python ist 4 Jahre älter als Java.)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich gehöre auch zu denen, die "instance" mit Exemplar übersetzen, weil "Instanz" im Deutschen etwas komplett anderes bedeutet. Statt eine deutsch aussehende leere Worthülse zu schaffen, sollte man lieber einen Begriff wählen, der bedeutungskompatibel ist und das trifft auf Exemplar oder Ausprägung zu.

Ansonsten: Objekt ist definitiv kein Synonym zu Exemplar, denn Klassen sind ein Implementationsdetail, welches nicht jede objektorientierte Programmiersprache kennt.

Die beste Begründung hat pütone selbst angegeben. Python nennt (genau wie Lisp im übrigen) alle Werte Objekte, egal ob es Exemplare von Klassen sind oder nicht. In neuen Python-Varianten verschmilzt dieser Unterschied, aber das Ur-Python macht den Unterschied sehr schön und nur etwas vom Typ "instance" ist Exemplar einer Klasse, repräsentiert durch ein Objekt vom Typ "classobj".

Ein Klassenobjekt ist übrigens ein Objekt, das eine Klasse repräsentiert, also das Exemplar einer Klassen-Klasse. Eine andere Bedeutung habe ich noch nie irgendwo gesehen. Die anderen Objekte heißen Exemplare der Klasse (nicht des Klassenobjekts, das würde die Konzeptebene und die Implementationsebene wieder vermischen).

Gegen den Begriff Attribut ist IMHO nichts zu sagen. Java nennt diese "fields", C++ wohl "members". Smalltalk kennt so etwas gar nicht, da gibt es nur Exemplarvariablen und Methoden, die man dann zum Zugriff benutzen kann. Gerne benutzt wird auch der Begriff properties (Eigenschaften), denn generischer geht's kaum noch. Sprachen aus der Self-Familie oder CLOS nennen's slot. Da fällt es schwer, einen guten deutschen Begriff zu finden. Denn Objekte in Spalten oder Schlitzen zu stecken wirkt komisch ;)

Was mir bei Python übrigens gefällt ist, dass nicht zwischen "member variables" und "member function" unterschieden wird, sondern dass es nur ein Konzept mit Attributen gibt. Steckt da eine Funktion drin, und ist das, wo es drin steckt eine Klasse, wird's automatisch eine Methode. Self oder Io machen das noch expliziter, indem sie von der Aktivierung eines Objekts sprechen und Funktionsobjekte dort aktiviert werden, wenn man sie aus einem Slot ausliest. Tatsächlich wird alles aktiviert, nur das andere Objekte auf die Aktivierung nicht gesonders reagieren. Nur Funktionen werden dann zu Closures. Methoden sind nämlich nichts anderes als Funktionen, die über einem Objekt abgeschlossen sind. Python macht die Bindung über self dabei wieder sehr explizit.

PS: Wenn schon jemand die kanonischen Begriffe definiert, dann weder Java noch Python, denn Smalltalk ist noch älter. Und der Begriff Objekt wurde wie gesagt noch viel früher bereits benutzt, das OO-Paradigma jedoch mit/für Smalltalk von Alan Kay begründet.

Stefan
BlackJack

Genau betrachtet ist Objekt kein Synonym für Exemplar, aber es wird oft so verwendet. Auch von mir, um Fragen aus dem Weg zu gehen, was denn ein Exemplar sei. Von "Ausprägung" fange ich erst gar nicht an. Es gibt ja Leute die sich schon über "Sicht" für "view" aufregen ─ möchte nicht wissen was die zu "Ausprägung" sagen. ;-)

Ich denke die "slots" kann man auch sinngemäss mit "Fächer" übersetzen. Zumindest bei dem Bild mit den Objekten, die Nachrichten austauschen, kann man sich an der Stelle bei jedem Objekt eine Reihe (beschrifteter) Briefkästen oder Fächer vorstellen, wo diese Nachrichten(-Objekte) zur Verarbeitung eingeworfen werden.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Es geht bei Slots weniger um die Empfänger von Nachrichten sondern um das Speichern von Objekten (bzw. deren Referenzen) in anderen Objekten. Man steckt ein Objekt in ein anderes, bildlich gesprochen, und dafür kann man natürlich etwas wie einen Schlitz oder Schacht benutzen, damit's auch festklemmt nicht wieder herausfällt ;)

Stefan
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Darii hat geschrieben:Ich weiß nicht, wo du da das Problem siehst. Eine Methode ist eine Methode auch in Python und ein Attribut ein Attribut. Das eine Methode gleichzeitig auch ein Attribut ist - ok, aber das heißt nicht, dass man eine Methode immer Attribut nennen muss.
Das Problem beschreibst du doch gerade selbst: Wenn ich von Attribut rede, dann ist eben nicht - wie z.B. in Java - klar, ob ich ein Attribut im engeren Sinne (= Daten-Attribut) oder ein Attribut im weiteren Sinne (= alles, was mit einem Punkt angehängt ist) meine und damit ist meine Aussage unklar.

Für mich ist unter dem Strich in diesem Thread nun etwa folgendes herausgekommen:

1. "Instantiieren" u.ä. ist nicht unbedingt eine günstige Vokabel, auch wenn man ihr in der Fachliteratur begegnet; es ist treffender, von einem "Exemplar" als von einer "Instanz" zu sprechen.

Kann man dann so etwas

Code: Alles auswählen

dackel = Hund()
also nicht mit einem Substantiv beschreiben?

Oder ist hier ein passender Begriff dabei:
"Exemplarbildung", "Exemplarifizierung", "Instanzbildung", "Objekterzeugung"?


2. Es hat seinen guten Grund, warum in Python alles hinter einem Punkt als Attribut bezeichnet wird. Andererseits gilt:
BlackJack hat geschrieben:Bei den Attributen wird auch bei Python in gewissen Grenzen der in anderen Sprachen übliche Sprachgebrauch verwendet, weil die Unterscheidung zwischen "Methoden" und "anderen Daten" schon wichtig ist.
Man sollte also auf jeden Fall sicherstellen, was man genau meint, wenn man gerade von "Attrtibut" spricht.
BlackJack

Also ich wüsste kein Substantiv was mir gefallen würde für ``Hund()``. Ich gehe mal davon aus, dass Du nur die rechte Seite der Zuweisung meintest und nicht "Instanziierung" und Zuweisung als Ganzes. :-)

In dem speziellen Beispiel kann man vielleicht auch von "Geburt" oder "Wurf" sprechen. ;-)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

BlackJack hat geschrieben:Also ich wüsste kein Substantiv was mir gefallen würde für ``Hund()``. Ich gehe mal davon aus, dass Du nur die rechte Seite der Zuweisung meintest [...]
Ja, darum ging es mir.
BlackJack hat geschrieben:In dem speziellen Beispiel kann man vielleicht auch von "Geburt" oder "Wurf" sprechen.
Also, ich finde "Geburt" auch von diesem Beispiel abstrahierend gar nicht schlecht!
Aber das scheint mir - jedenfalls bisher - doch eine eher unübliche Redeweise zu sein. Vielleicht war das ja der entscheidende Anstoß ...
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

pütone hat geschrieben:Das Problem beschreibst du doch gerade selbst: Wenn ich von Attribut rede, dann ist eben nicht - wie z.B. in Java - klar, ob ich ein Attribut im engeren Sinne (= Daten-Attribut) oder ein Attribut im weiteren Sinne (= alles, was mit einem Punkt angehängt ist) meine und damit ist meine Aussage unklar.
Da ist kein Problem. Python-Methoden würde man auch in Java Attribute nennen, da es eigentlich auch nur Objekte sind. Es gibt keine Attribute im engeren oder weiteren Sinne. Besser wäre es zu sagen: In Python gibt es keine Methoden wie in Java. Und wenn man von Methoden spricht, meint man spezielle Objekte/Attribute.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ein Methodenobjekt entsteht in Python automatisch, indem man ein Attribut eines Klassenobjekts ausliest, in dem ein Funktionsobjekt steckt. Macht man dies direkt, entsteht eine ungebundene Methode, macht man es indirekt über ein Exemplar, entsteht eine an dieses Exemplar gebundene Methode.

Code: Alles auswählen

# ein Funktionsobjekt namens 'x' (d.h. es steckt in der Variablen 'x')
def f(x): return x

# ein Klassenobjekt names 'C'
class C:
  pass

# packe f in das Attribut 'm' von C
C.m = f

# eine ungebundene Methode
u = C.m

# eine an Exemplar 'c' gebundene Methode
c = C()
b = c.m

# das Funktionsobjekt selbst
C.__dict__['m']
Stefan
Antworten