__init__ в классе предположительно отсутствуют аргументы?

#python #class #init

Вопрос:

 class FoodItem:  def __init__(self, item_name, amount_fat, amount_carbs, amount_protein, num_servings):  self.item_name = "None"  self.amount_fat = 0.0  self.amount_carbs = 0.0  self.amount_protein = 0.0  self.num_servings = 0.0    def get_calories(self, num_servings):  # Calorie formula  calories = ((self.fat * 9)   (self.carbs * 4)   (self.protein * 4)) * num_servings;  return calories    def print_info(self):  print('Nutritional information per serving of {}:'.format(self.name))  print(' Fat: {:.2f} g'.format(self.fat))  print(' Carbohydrates: {:.2f} g'.format(self.carbs))  print(' Protein: {:.2f} g'.format(self.protein))  if __name__ == "__main__":    food_item1 = FoodItem()    item_name = input()  amount_fat = float(input())  amount_carbs = float(input())  amount_protein = float(input())    food_item2 = FoodItem(item_name, amount_fat, amount_carbs, amount_protein)    num_servings = float(input())    food_item1.print_info()  print('Number of calories for {:.2f} serving(s): {:.2f}'.format(num_servings,   food_item1.get_calories(num_servings)))    print()    food_item2.print_info()  print('Number of calories for {:.2f} serving(s): {:.2f}'.format(num_servings,   food_item2.get_calories(num_servings)))  

Приводит к ошибке:

 Traceback (most recent call last):  File "main.py", line 22, in lt;modulegt;  food_item1 = FoodItem() TypeError: __init__() missing 5 required positional arguments: 'item_name', 'amount_fat', 'amount_carbs', 'amount_protein', and 'num_servings'  

Я не замечаю очевидной ошибки, но я новичок в инициализации классов. Ошибка, похоже, говорит о том, что мне не хватает аргументов в исходном инициале, но, учитывая, что они были инициализированы значениями 0/ «нет», я этого не понимаю.

Возможно, кто-то может уловить ошибку?

Комментарии:

1. food_item1 = FoodItem() . Вам нужно передать аргументы здесь так же, как вы сделали это во второй раз.

2. Вы инициализируете членов класса, а не аргументы функции, если хотите, чтобы ваши функции имели параметры по умолчанию. например __init__(self, item_name=0, amount_fat=0...

3.Ошибка совершенно очевидна, FoodItem() содержит 0 аргументов, но вы написали __init__ , что требуется 5 позиционных аргументов, перечисленных ошибкой. Чего именно вы не понимаете? Почему вы рассчитываете food_item1 = FoodItem() работать?

4. Обратите внимание, что ваши аргументы to __init__ не используются, и вместо этого вы просто инициализируете переменные в жестко закодированные значения.

Ответ №1:

Вы должны инициализировать свой класс ВСЕМИ аргументами: item_name , amount_fat , amount_carbs , amount_protein и num_servings .

 # here, you have to provide the arguments food_item1 = FoodItem() ... # and here, you are missing the 'num_servings' argument food_item2 = FoodItem(item_name, amount_fat, amount_carbs, amount_protein)  

На всякий случай вы можете указать значения по умолчанию для аргумента, например:

 # here, the argument will default to '0' if you do not provide a value. class Example:   def __init__(self, argument=0):   self.argument = argument  example = Example() print(example.argument)  gt;gt;gt; 0  

Ответ №2:

Ваш код не говорит, чему соответствовать, например self.amount_fat, с каким аргументом вы говорите. Вы должны написать: self.amount_fat = сумма

А затем объявите, что это self.amount_fat, иначе ваша программа не будет знать, где читать.

 def __init__(self, item_name, amount_fat, amount_carbs, amount_protein, num_servings):  self.item_name = item_name  self.amount_fat = amount_fat  self.amount_carbs = amount_carbs  self.amount_protein = amount_protein  self.num_servings = num_servings  

Затем вы можете добавить то, что вы закодировали изначально.