Eine Fehlermeldung die ich nicht verstehe

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.
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

Eine Fehlermeldung die ich nicht verstehe

Beitragvon breathe_easy » Mittwoch 16. Juli 2008, 17:10

Sorry ich wollt das eigentlich als code erscheine lassen!

Code: Alles auswählen

#! /usr/bin/python
# -*- coding: utf-8 -*-
import pdb
class Bruch  ():
   Nenner= 1
   Zaehler = 1
   pdb.set_trace()
   def set_Zaehler (self):
         self.Zaehler =  int(raw_input("Bitte geben Sie den   Zaehler ein; "))
         return zaehler
   
   def set_Nenner(self) :
      nenner = 0
      while nenner ==0 :
         nenner = int(raw_input("Bitte geben Sie den Nenner ein: "))
         if nenner == 0:
            print "Bitte keine Null als Nenner!"
         self.Nenner = nenner
      return self.Nenner
         
   def get_Nenner(self):
      return self.Nenner
   
   def get_Zaehler(self):
      return self.Zaehler
   
   def Multiplikation (self, anderer_Zaehler, anderer_Nenner):
      neuer_zaehler = self.Zaehler * anderer_Zaehler
      neuer_Nenner = self.Nenner  * anderer_Nenner


und nun die Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "Bruch.py", line 38, in <module>
    Bruch1.Multiplikation(Bruch2.get_Zaehler, Bruch2.get_Nenner,)
  File "Bruch.py", line 28, in Multiplikation
    neuer_zaehler = self.Zaehler * anderer_Zaehler
TypeError: unsupported operand type(s) for *: 'int' and 'instancemethod'


Kann mir jemand weiterhelfen? Verstehe das Problem nicht, da ich wenn ich das self vor Zaehler weglasse die Fehlermeldung bekomme, dass der Name nicht bekannt ist. O.k. da kann ich mir noch einen Reim drauf machen.

Breathe_easy
shakebox
User
Beiträge: 175
Registriert: Montag 31. März 2008, 17:01

Beitragvon shakebox » Mittwoch 16. Juli 2008, 17:13

au, kannst Du das bitte sauber formatieren und richtig als Python-Code taggen? So ist das verdammt muehsam lesbar und mangels Zeilennummern kann man sich auch schwer auf ne bestimmte Zeile beziehen.

Danke!
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Re: Eine Fehlermeldung die ich nicht verstehe

Beitragvon audax » Mittwoch 16. Juli 2008, 17:15

breathe_easy hat geschrieben:

Code: Alles auswählen

#! /usr/bin/python
# -*- coding: utf-8 -*-
import pdb
class Bruch  ():
   Nenner= 1
   Zaehler = 1
   pdb.set_trace()
   def set_Zaehler (self):
         self.Zaehler =  int(raw_input("Bitte geben Sie den   Zaehler ein; "))
         return zaehler
   
   def set_Nenner(self) :
      nenner = 0
      while nenner ==0 :
         nenner = int(raw_input("Bitte geben Sie den Nenner ein: "))
         if nenner == 0:
            print "Bitte keine Null als Nenner!"
         self.Nenner = nenner
      return self.Nenner
         
   def get_Nenner(self):
      return self.Nenner
   
   def get_Zaehler(self):
      return self.Zaehler
   
   def Multiplikation (self, anderer_Zaehler, anderer_Nenner):
      neuer_zaehler = self.Zaehler * anderer_Zaehler
      neuer_Nenner = self.Nenner  * anderer_Nenner


Zur Frage:

Code: Alles auswählen

 Bruch1.Multiplikation(Bruch2.get_Zaehler, Bruch2.get_Nenner,)

Du übergibts wirklich 2 Methoden, willst aber wahrscheinlich deren Rückgabewerte.

Code: Alles auswählen

 Bruch1.Multiplikation(Bruch2.get_Zaehler(), Bruch2.get_Nenner())

Außerdem war nen Komma zuviel.
EyDu
User
Beiträge: 4868
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Beitragvon EyDu » Mittwoch 16. Juli 2008, 17:28

Allgemein sieht dein Code aber recht seltsam aus. Beim Aufruf von set_nenner würde ich nicht erwarten, dass ich dazu aufgfordert werde, etwas einzugeben. Du fängst auch keinen Fehler ab, falls man keine Zahl eingibt.

Die Initialisierung von "Nenner" und "Zaehler" würde ich nicht auf Klassenebene machen, erledige das besser in der __init__-Methode. Man merkt zwar in diesem Fall keinen Unterschieden, aber die Werte gehören zu einem Objekt und nicht zur Klasse.

Und wenn du dich schon an OOP versuchst, dann solltest du bei der Multiplikation auch einen Bruch übergeben und nicht einen Zähler und einen Nenner. Die Methoden get_nenner und get_zaehler sind auch überlfüssig. Wenn man keine Extra-Berechnungen zu erledingen hat, greift man in Python direkt auf Attribute zu.

Ein kurzer Blick in PEP8 könnte auch nicht schaden.
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

Beitragvon breathe_easy » Mittwoch 16. Juli 2008, 17:41

hey langsam! erster Tag OOP in Python. Trotzdem Danke!
Wie übergebe ich denn einen Bruch?

Breathe_easy
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Beitragvon audax » Mittwoch 16. Juli 2008, 17:49

Naja, so wie alles andere auch.

Wer ist online?

Mitglieder in diesem Forum: Baidu [Spider], Bing [Bot], onkelhamu