#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
Затем вы можете добавить то, что вы закодировали изначально.