2016-08-10 2 views
-4

Bei diesen Code ausgeführt wird,Python 3.x - "Typeerror: 'int' Objekt ist nicht aufrufbar"

#Silent Auction 

    class Auction: 

     def __init__(self): 
      self.reserve_price = 30 
      self.highest_bid = 0 
      self.highest_bidder = "" 
      self.namelist = [] 
      self.bidlist = [] 

     def reserve_price(self): 
      print("Hello. The reserve price is ${}".format(self.reserve_price)) 

     def new_bidder(self): 
      LOOP = 0 
      while LOOP == 0: 
       name = input("What is your name? 'F' for FINISH ") 
       if name.upper() == "F": 
        LOOP = 1 
       else: 
        bid = int(input("Hello {}. What is your bid? ".format(name))) 
        if bid > self.highest_bid: 
         self.highest_bid = bid 
         self.highest_bidder = name 
         self.namelist.append(name) 
         self.bidlist.append(bid) 

        else: 
         print("Sorry {}. You'll need to make another higher bid.".format(name)) 
         print("Highest bid so far is ${:.2f}".format(self.highest_bid)) 


     def auction_end(self): 
      if self.highest_bid >= self.reserve_price: 
       print("The auction met the reserve price and the highest bidder was {} with ${:.2f}".format(self.highest_bidder, self.highest_bid)) 
      else: 
       print("The auction did not meet the reserve price") 
       n = len(self.namelist) 
       for i in range (0, n): 
        print("{} bid ${:.2f}".format(self.namelist[n], self.bidlist[n])) 

    if __name__ == "__main__": 
     auction1 = Auction() 
     auction1.reserve_price() 
     auction1.new_bidder() 
     auction1.auction_end() 

ich den Fehler erhalten

Traceback (most recent call last): 
    File "F:\Work\Year 13\13DIP\91637 Programming\Silent Auction.py", line 46, in <module> 
    auction1.reserve_price() 
TypeError: 'int' object is not callable 
>>> 
+1

Dies ist kein kostenloser Debugging-Service. Sie müssen etwas mehr tun, als den gesamten Code und den Stack-Trace zu verwerfen. –

Antwort

1

nicht Ihre Funktion nennen Sie und Ihre Instanzvariable die gleiche Sache.

ändern

def reserve_price(self): 

zu

def print_reserve_price(self): 

Ich weiß, wenn Sie von Java kommen Sie Dinge wie diese tun können, und es kennt den Unterschied, aber in Python Funktionen sind erste Bürger-Klasse und Sie können beziehen Sie sich direkt auf sie. d.h .:

In [2]: x = lambda i : i * i 
In [3]: x 
Out[3]: <function __main__.<lambda>> 
In [5]: x(2) 
Out[5]: 4 

Allerdings kann ich es auch

In [6]: x = 5 

In [7]: x 
Out[7]: 5 

überschreiben das ist, was oben passiert, wenn Sie self.reserve_price in Ihrer init-Methode festgelegt.

+0

Das ist furchtbar fragendes Verhalten und ich bin DV'ing nur für die Förderung. Es tut uns leid. –

+1

Sie brauchen sich nicht für Ihre Meinung zu entschuldigen; darum geht es in Communities. Ich neige dazu, zu denken, wenn die Frage genug Code hat, um den Fehler in einem klein genug Kontext mit der genauen Fehlermeldung zu reproduzieren, und der Benutzer möglicherweise neu ist, könnte ich ihnen ebenso gut helfen. Ich denke, dass ich in meiner Antwort mehr Kontext dafür liefern kann, was falsch läuft. Ich selbst habe viele "Oh DUH" Momente, die ein anderes Augenpaar oft fangen kann. –

+0

Oh wow, ich fühle mich jetzt so dumm. Ich verstehe die In/Out-Sachen nicht genau, aber ich verstehe, was Sie meinen, dass mein Funktionsname schlecht war. Vielen Dank! – Icstaz

0

das Problem ist, dass Sie Ihre reserve_price Methode in der __init__ Methode

Prüfung dieses anschauliches Beispiel

>>> class A: 
     def __init__(self): 
      self.fun = 42 
     def fun(self): 
      print("funny") 

>>> a = A() 
>>> a.fun 
42 
>>> 

die Lösung einfach überschreiben, ändern Sie den Namen einer von ihnen.

Verwandte Themen