Methode soll einen Wert zurückgeben - Anfängerproblem

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
gstueb
User
Beiträge: 5
Registriert: Freitag 24. Juli 2009, 14:25
Wohnort: Langenau

Dienstag 4. Januar 2011, 00:00

Hallo,

warum gibt mir der zweite Print-Befehl nicht die Zahl 6 zurück, sondern den Hinweis

Code: Alles auswählen

<bound method Zahl.doppelt of <__main__.Zahl object at 0x02312130>>

Code: Alles auswählen

class Zahl:
  def __init__(self, z=0):
    self.z = z
    
  def doppelt(self):
    return z*2

x = Zahl(3)
print(x.z)
print(x.doppelt)
Eine Methode muss doch einen einfachen Wert zurückgeben können? Irgendwie hab' ich hier einen Hänger...

Danke & Gruß,
Gregor
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dienstag 4. Januar 2011, 00:05

Ja, dazu muss man sie allerdings auch aufrufen:

Code: Alles auswählen

print(x.doppelt())
Benutzeravatar
sparrow
User
Beiträge: 2709
Registriert: Freitag 17. April 2009, 10:28

Dienstag 4. Januar 2011, 00:07

Weil x.doppelt die Funktion ist.
Der Print-Befehl zeigt dir was sich dahinter versteckt.

Um eine Funktion aufzurufen verwende: funktion()
Auch ohne übergebene Parameter musst du die (leeren) Klammern verwenden. So unterscheidet sich der Aufruf von dem Verweis auf die Funktion.

Warum das überhaupt geht?

Code: Alles auswählen

a = x.doppelt
a()
Würde nämlich ebenfalls die Methode aufrufen.
Das ist ziemlich mächtig und man kann damit einiges an Magie machen.


Gruß
Sparrow
gstueb
User
Beiträge: 5
Registriert: Freitag 24. Juli 2009, 14:25
Wohnort: Langenau

Dienstag 4. Januar 2011, 00:26

Danke für die schnelle Hilfe...
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Dienstag 4. Januar 2011, 00:50

Code: Alles auswählen

print(x.doppelt())
wird aber auch nicht funktioniert haben, oder?
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 4. Januar 2011, 14:05

Wieso meinst du das?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
EyDu
User
Beiträge: 4877
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dienstag 4. Januar 2011, 14:39

Leonidas hat geschrieben:Wieso meinst du das?
Wegen des fehlenden "self"s.
Das Leben ist wie ein Tennisball.
gstueb
User
Beiträge: 5
Registriert: Freitag 24. Juli 2009, 14:25
Wohnort: Langenau

Mittwoch 5. Januar 2011, 00:53

EyDu hat geschrieben:
Leonidas hat geschrieben:Wieso meinst du das?
Wegen des fehlenden "self"s.
Du hast recht.

Vor dem Posten meines Problemes hatte ich den Aufruf der Methode mit nachfolgender leerer Klammer sogar probiert, hatte dann auf die schnelle nur gesehen "vorher Fehler, mit der Verwendung der Klammer () immer noch Fehler". Dass es sich beim zweiten mal um eine andere Fehlermeldung Aufgrund des fehlenden "self." handelte, hatte ich übersehen.

Naja ;-)
Antworten