2016-09-17 2 views
-2
class Account(object): 
    def __init__(self,holder, number, balance, credit_line = 1500): 
     self.holder = holder 
     self.number = number 
     self.balance = balance 
     self.credit_line = credit_line 

    def deposit(self, amount): 
     self.balance = amount 
    def withdraw(self, amount): 
     if(self.balance - amount < -self.credit_line): 
      return False 
     else: 
      self.balance -= amount 
      return True 

    def balance(self): 
     return self.balance 
    def holder(self): 
     return self.holder 

    def transfer(self, target, amount): 
     if(self.balance - amount < -self.credit_line): 
      #coverage insufficient 
      return False 
     else: 
      self.balance -= amount 
      target.balance += amount 
      return True 
Guido = Account("Guido", 10 ,1000.50) 
Guido.balance() 
------------------------------------------------------------------------- 


Traceback (most recent call last): 
    File "Account.py", line 31, in <module> 
    Guido.balance() 
TypeError: 'float' object is not callable 
+0

'self.balance = amount' überschreibt die' balance' Funktion –

+0

Die anderen Antworten haben das Problem erklärt, aber ich möchte nur sagen, dass "Accessoren" wie Ihre "Balance" und "Halter" -Methoden sind nicht in Python benötigt. Sie können Ihren externen Code direkt auf das Attribut (in diesem Fall den gleichen Namen, der zu dem Problem führt) zugreifen. Wenn Sie später feststellen, dass Sie eine spezielle Verarbeitung für den Wert durchführen müssen (z. B. auf eine bestimmte Anzahl von Dezimalstellen abrunden), können Sie eine Attributeigenschaft verwenden, um die Attributsuche in einen Funktionsaufruf umzuwandeln. – Blckknght

Antwort

1

Sie überschreiben Methode balance in Ihrer __init__ Methode. Sie könnten entweder den Feldnamen in _balance ändern oder einfach balance entfernen und Guido.balance verwenden.

Beachten Sie auch, dass Sie Ihre Variablen beginnend mit Kleinbuchstaben Name sollte (dh guido = Account(...), nicht Guido)

0
class Account(object): 
    def __init__(self,holder, number, balance, credit_line = 1500): 
     self.holder = holder 
     self.number = number 
     self.balance = balance 
     self.credit_line = credit_line 

    def deposit(self, amount): 
     self.balance = amount 
    def withdraw(self, amount): 
     if amount > self.balance: 
      print "Amount greater than available balance" 

     else: 
      self.balance -= amount 
      return True 

    def bala_nce(self): 
     return self.balance 
    def hold_er(self): 
     return self.holder 
    def num(self): 

     return self.number 


    def transfer(self, target, amount): 
     if(self.balance - amount < -self.credit_line): 
      #coverage insufficient 
      return False 
     else: 
      self.balance -= amount 
      target.balance += amount 
      return True 

guido = Account("Guido", 10 ,10000.100) 
guido.withdraw(2300.100) 

print "Account name: " ,guido.hold_er() 
print "available balance: $",guido.bala_nce() 

thanx Sie bald ............... es funktioniert jetzt

Verwandte Themen