Seite 1 von 1

Methode soll einen Wert zurückgeben - Anfängerproblem

Verfasst: Dienstag 4. Januar 2011, 00:00
von gstueb
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

Re: Methode soll einen Wert zurückgeben - Anfängerproblem

Verfasst: Dienstag 4. Januar 2011, 00:05
von cofi
Ja, dazu muss man sie allerdings auch aufrufen:

Code: Alles auswählen

print(x.doppelt())

Re: Methode soll einen Wert zurückgeben - Anfängerproblem

Verfasst: Dienstag 4. Januar 2011, 00:07
von sparrow
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

Re: Methode soll einen Wert zurückgeben - Anfängerproblem

Verfasst: Dienstag 4. Januar 2011, 00:26
von gstueb
Danke für die schnelle Hilfe...

Re: Methode soll einen Wert zurückgeben - Anfängerproblem

Verfasst: Dienstag 4. Januar 2011, 00:50
von mutetella

Code: Alles auswählen

print(x.doppelt())
wird aber auch nicht funktioniert haben, oder?

Re: Methode soll einen Wert zurückgeben - Anfängerproblem

Verfasst: Dienstag 4. Januar 2011, 14:05
von Leonidas
Wieso meinst du das?

Re: Methode soll einen Wert zurückgeben - Anfängerproblem

Verfasst: Dienstag 4. Januar 2011, 14:39
von EyDu
Leonidas hat geschrieben:Wieso meinst du das?
Wegen des fehlenden "self"s.

Re: Methode soll einen Wert zurückgeben - Anfängerproblem

Verfasst: Mittwoch 5. Januar 2011, 00:53
von gstueb
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 ;-)