Не могу правильно вызвать метод доступа класса Python - PullRequest
0 голосов
/ 06 марта 2020

Вот код

import random


class Animal(object):
    __name = ""
    __animal_type = ""
    __mood = 0

    def __init__(self, animal_type, animal_name):
        self.__animal_type = animal_type
        self.__name = animal_name
        self.__mood = random.randint(1, 3)

    def get_animal_type(self, animal):
        return self.__animal_type

    def get_name(self, animal):
        return self.__name

    def check_mood(self, animal):
        animal_mood = ""
        if self.__mood == 0:
            animal_mood = "the mood was 0 and didn't change"
        elif self.__mood == 1:
            animal_mood = "happy"
        elif self.__mood == 2:
            animal_mood = "hungry"
        elif self.__mood == 3:
            animal_mood = "sleepy"
        return animal_mood


animal_list = [Animal]
do_animal_creation = True
while do_animal_creation:
    print("Welcome to animal gen")

    new_animal_type = input("What type of animal? ")
    new_animal_name = input("Name of animal? ")

    new_animal = Animal(new_animal_type, new_animal_name)
    animal_list.append(new_animal)

    do_animal_creation = input("Add another animal? y/n: ")

    if do_animal_creation != 'y':
        do_animal_creation = False
        print("\nThanks for using this program.")
    else:
        do_animal_creation = True
print("Animal list:")
for item in animal_list:
    item_name = item.get_name(item)
    item_type = item.get_animal_type(item)
    item_mood = item.check_mood(item)
    print(item_name + " the " + item_type + " is " + item_mood + ".")

Каждый раз, когда я пытаюсь вызвать методы get_name или get_animal_type или check_mood, он говорит мне, что я отправляю неверное количество параметров. Затем я пытаюсь поиграть с параметрами, либо отправить еще один, как он просит, либо убрать параметр в определении метода в классе, и ни один из них не сработает. Мне кажется, что я синтаксически неправильно вызываю методы, но я не знаю, что именно я делаю неправильно.

1 Ответ

0 голосов
/ 06 марта 2020

Первый элемент вашего animal_list - это класс Animal, а не экземпляр. Следовательно, вызов методов экземпляра для него не будет работать должным образом. Что бы вы ни пытались сделать, чтобы это работало (например, передача экземпляра в качестве первого аргумента), затем произойдет сбой для последующих элементов, которые являются экземплярами.

Измените

animal_list = [Animal]  
# this puts the Animal class in your list
# Note: In Python, lists are not type-parametrized like in other languages,
# which is probably what you assumed you were doing

на

animal_list = []

Более того, ваши геттеры не должны принимать параметры:

def get_animal_type(self):
    return self.__animal_type

и вызывать его:

item.get_animal_type()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...