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

Beitragvon numerix » Samstag 8. März 2008, 14:33

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

Beitragvon BlackJack » Samstag 8. März 2008, 15:48

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

Beitragvon numerix » Samstag 8. März 2008, 16:17

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

Beitragvon Darii » Samstag 8. März 2008, 17:23

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

Beitragvon sma » Sonntag 9. März 2008, 11:50

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
BlackJack

Beitragvon BlackJack » Sonntag 9. März 2008, 12:16

Wobei die ungebundende Methode hier ein eher unwichtiges Detail ist. Die wird wieder verschwinden:

Code: Alles auswählen

bj@s8n:~$ python3.0
Python 3.0a3 (r30a3:61158, Mar  9 2008, 12:11:09)
[GCC 4.2.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class A:
...   def a(): pass
...
>>> A.a
<function a at 0x81fa0ac>
>>>


Könnte sein, dass das in 2.6 auch schon so sein wird.

Wer ist online?

Mitglieder in diesem Forum: thorius