Programmierproblem Objekte im Objekt

11/02/2008 - 02:47 von Marco Kittel | Report spam
Hallo Leute,

Ich übe momentan Python und habe folgendes geschrieben:

Bisher funktioniert alles, wenn ich Cashflow initialisiere mit
a = Cashflow(444,44) und dann a.nGK(3) aufrufe, bekomme ich folgenden
Fehler:Traceback (most recent call last):
  File "<pyshell#122>", line 1, in <module>
    a.nGK(3)
  File "/home/leader/python/Konto.py", line 56, in nGK
    self.Konto.auszahlen(summe)
  File "/home/leader/python/Konto.py", line 19, in auszahlen
    Bargeld.einnehmen(auszahlen)
TypeError: unbound method einnehmen() must be called with Bargeld instance
as first argument (got int instance instead)

Was mache ich falsch?


class Konto(object):
    """Klasse definiert ein Giro Konto"""

    def __init__(self,kontostand):
        self.__kontostand = kontostand
        if kontostand < 0: self.__ueberzogen = True
        else:
            self.__ueberzogen = False

    def einzahlen(self,einzahlen):
        self.__kontostand +=einzahlen
        if self.__kontostand < 0:
            self.__ueberzogen = True
        else:
           self.__ueberzogen = False

    def auszahlen(self,auszahlen):
        self.__kontostand -=auszahlen
        Bargeld.einnehmen(auszahlen)

        if self.__kontostand < 0:
         self.__ueberzogen = True
           
        else:
            self.__ueberzogen = False

    def zeige_kontostand(self):
      return  self.__kontostand

class Bargeld(object):
    """Klasse definiert eine Geldbörse"""
    def __init__(self,bargeld):
       self.__bargeld = bargeld

    def ausgeben(self,betrag):
        if betrag <=self.__bargeld:
           self.__bargeld-=betrag
           return True
        else:
            return False

    def einnehmen(self,betrag):
        self.__bargeld+=betrag

    def zeige_bargeld(self):
        return __bargeld

class Cashflow(object):
    """Klasse definiert den Fluss des Geldes im kleinen Rahmen"""
    def __init__(self,kontostand,cash):
       self.Konto = Konto(kontostand)
       self.Bargeld = Bargeld(cash)
     
    def nGK(self,summe):
        """nimmt Betrag vom Konto und verweist ihn zum Bargeld"""
        self.Konto.auszahlen(summe)
        self.Bargeld.einnehmen(summe)
       
 

Lesen sie die antworten

#1 Ralf Schönian
11/02/2008 - 06:13 | Warnen spam
Moin Marco,

Du rufst die Klasse Bargeld direkt auf. Dreh die Reihenfolge der Aufrufe
in nGK einfach um und übergib die Instanz self.Bargeld.
Noch ein Tip: Schreib die Variablen klein, damit sie besser von den
Klassen unterscheidbar sind und verwende sprechende Bezeichner. "nGK"
sieht für mich wie eine Variable aus. konto_an_bargeld() wàre etwas
aussagekràftiger.

Gruß,
Ralf Schönian



Marco Kittel schrieb:
Hallo Leute,

Ich übe momentan Python und habe folgendes geschrieben:

Bisher funktioniert alles, wenn ich Cashflow initialisiere mit
a = Cashflow(444,44) und dann a.nGK(3) aufrufe, bekomme ich folgenden
Fehler:Traceback (most recent call last):
File "<pyshell#122>", line 1, in <module>
a.nGK(3)
File "/home/leader/python/Konto.py", line 56, in nGK
self.Konto.auszahlen(summe)
File "/home/leader/python/Konto.py", line 19, in auszahlen
Bargeld.einnehmen(auszahlen)
TypeError: unbound method einnehmen() must be called with Bargeld instance
as first argument (got int instance instead)

Was mache ich falsch?


class Konto(object):
"""Klasse definiert ein Giro Konto"""

def __init__(self,kontostand):
self.__kontostand = kontostand
if kontostand < 0: self.__ueberzogen = True
else:
self.__ueberzogen = False

def einzahlen(self,einzahlen):
self.__kontostand +=einzahlen
if self.__kontostand < 0:
self.__ueberzogen = True
else:
self.__ueberzogen = False

def auszahlen(self,auszahlen):
self.__kontostand -=auszahlen
Bargeld.einnehmen(auszahlen)

if self.__kontostand < 0:
self.__ueberzogen = True

else:
self.__ueberzogen = False

def zeige_kontostand(self):
return self.__kontostand

class Bargeld(object):
"""Klasse definiert eine Geldbörse"""
def __init__(self,bargeld):
self.__bargeld = bargeld

def ausgeben(self,betrag):
if betrag <=self.__bargeld:
self.__bargeld-=betrag
return True
else:
return False

def einnehmen(self,betrag):
self.__bargeld+=betrag

def zeige_bargeld(self):
return __bargeld

class Cashflow(object):
"""Klasse definiert den Fluss des Geldes im kleinen Rahmen"""
def __init__(self,kontostand,cash):
self.Konto = Konto(kontostand)
self.Bargeld = Bargeld(cash)

def nGK(self,summe):
"""nimmt Betrag vom Konto und verweist ihn zum Bargeld"""
self.Konto.auszahlen(summe)
self.Bargeld.einnehmen(summe)

Ähnliche fragen