TypeError für __init __ ()

Ich versuche, einen Ernährungsrechner zu erstellen, und ich habe ein bisschen Probleme bei init ().

def main(): print "Welcome to the MACRONUTRIENT CALCULATOR" User_nutrition = get_data() User_nutrition.calorie_budget() class get_data(object): def __init__(self, calorie_deficit): self.calorie_deficit = calorie_deficit def calorie_bugdet(self): # ask for calorie deficit self.calorie_deficit = float(input("Enter you calorie deficit: ")) if __name__ == "__main__": main() 

Ich bekomme einen Fehler:

  TypeError: __init__() takes exactly 2 arguments (1 given) 

Aber wenn ich mir ein Dokumentationsbeispiel ansehe, sehe ich das

  class Complex: def __init__(self, realpart, imagpart): self.r = realpart self.i = imagpart 

Ist gut! Ich bin ein bisschen verwirrt. Ich weiß, dass init (Selbst) Art hilft, das Objekt zu initialisieren und Platz für sie im Gedächtnis zuzuteilen, aber das ist alles, was ich davon kenne. Bin ich irgendwelche anderen Informationen über init und Selbst, die ich wissen sollte?

  • Sich gegenseitig ausschließen zwischen Gruppen
  • "ImportError: Kein Modul namens pwd" aber es existiert
  • Python Desktop Application Database
  • Bokeh multi_line und HoverTool
  • IPython NameError: name 'pkg_resources' ist nicht definiert
  • Nicht in der Lage, bestimmte Werte einer Website mit Regex zu kratzen
  • So senden Sie das Passwort nach Benutzernamen in der Eingabeaufforderung mit python
  • Wie karte ich eine Reihe von Bedingungen als Schlüssel in einem Wörterbuch?
  • 2 Solutions collect form web for “TypeError für __init __ ()”

    Das Problem ist mit:

     User_nutrition = get_data() # one argument self # and def __init__(self, calorie_deficit): # two arguments 

    Du solltest tun

     User_nutrition = get_data(5) # add one argument # or def __init__(self, calorie_deficit = 0): # make one argument default 

    Zuerst gibt __init__ nicht Platz für das Objekt im Speicher, das von __new__ angepasst wird. Die Instanz wurde bereits durch den Punkt __init__ . In diesem Fall akzeptieren Sie zwei Parameter:

     class get_data(object): def __init__(self, calorie_deficit): self.calorie_deficit = calorie_deficit 

    Die erste ist die Instanz (die implizit übergeben wird), also das einzige Argument, das du passieren calorie_deficit ist calorie_deficit . Allerdings in Ihrem main() Anruf:

     User_nutrition = get_data() 

    Sie geben dieses Argument nicht weiter, so dass nur die Instanz übergeben wurde. Daher der Fehler:

     TypeError: __init__() takes exactly 2 arguments (1 given) 
    Python ist die beste Programmiersprache der Welt.