2015-04-17 2 views
-2

У меня есть две программы. Первый animalGenerator.py:eTypeError: __init __() missing 1 обязательный позиционный аргумент: 'Тип'

# This program generates a name and an animal type 

import Animals 

print("Welcome to the animal generator!") 
print("This program creates Animal objects") 


def main(): 

    animals = make_list() 

    print("\nAnimal List") 
    print("-------------") 

    display_list(animals) 

def make_list(): 

    animal_list = [] 

    again = 'y' 

    while again.lower() == 'y': 

     typ = input("\nWhat type of animal would you like to create? ") 

     nam = input("What is the animal's name? ") 

     ani = Animals.Animal(typ, nam) 

     animal_list.append(ani) 

     again = input("\nWould you like to add more animals (y/n)? ") 

    return animal_list 

def display_list(animal_list): 
    for item in animal_list: 
     print("\n" + item.get_name() + "the" + item.get_Type() + "is" + item.get_mood()) 

main() 

Вторая программа Animals.py:

import random 

class Animal: 

def __init__(self, name, mood, Type): 

    self.__name = name 
    self.__mood = mood 
    self.__animal_type = Type 

def set_name(self, name): 

    self.__name = name 

def set_mood(self, mood): 

    self.__mood = mood 

def set_animal_type(self, Type): 

    self.__animal_type = Type 

def toss(self): 

    if random.randint(1, 2, 3) == 1: 
     self.__mood = 'Happy' 
    elif random.randint(1, 2, 3) == 2: 
     self.__mood = 'Hungry' 
    elif random.randint(1, 2, 3) == 3: 
     self.__mood = 'Sleepy' 

def get_name(self): 

    return self.__name 

def get_mood(self): 

    return self.__mood 

def get_animal_type(self): 

    return self.__animal_type     

Я получаю ошибку (название) при запуске первой программы Это отслеживающий:

Traceback (most recent call last): 
    File "C:\Users\Dahlia\Desktop\McCuneShannonAnimals\animalGenerator.py", line 42, in <module> 
    main() 
    File "C:\Users\Dahlia\Desktop\McCuneShannonAnimals\animalGenerator.py", line 11, in main 
    animals = make_list() 
    File "C:\Users\Dahlia\Desktop\McCuneShannonAnimals\animalGenerator.py", line 30, in make_list 
    ani = Animals.Animal(typ, nam) 
TypeError: __init__() missing 1 required positional argument: 'Type' 

Может кто-нибудь, пожалуйста, помогите мне выяснить, как/почему «Тип» - отсутствующий позиционный аргумент?

+2

Сообщение об ошибке сообщает вам, что не так: вы пытаетесь вызвать инициализатор (__init __()) с недостаточным количеством аргументов. – fuesika

+0

Проблема заключается в 'ani = Animals.Animal (typ, nam)', где заданы только два параметра, в то время как три ожидаются. –

ответ

-1

Вторая программа не похожа на действительный python, отсутствует уровень отступов, поэтому я удивлен, что это действительно работает вообще.

Однако, к исходной задаче - вы инстанцирование животного с (typ, nam), однако в конструкторе он также принимает третий параметр - Type - (name, mood, Type) - это позиционная аргумент переводчик жалуется.

+0

'type' - это не то же самое, что' Type'. –

+0

Нет, 'Type' не является ключевым словом в Python. 'type()' является встроенной функцией. – KSFT

+0

@PadraicCunningham Ты бил меня на четыре секунды. Тем не менее, 'type' не является технически ключевым словом. Вы можете использовать его как переменную; это просто плохая практика. – KSFT

1

Вы определили как def __init__(self, name, mood, Type). Однако вы называете это ani = Animals.Animal(typ, nam) - это два аргумента из трех ожидаемых. Убедитесь, что каждый метод определен правильно и что методы всегда называются правильно, в соответствии с их определением.