我无法返回__mood字段来为动物对象生成随机情绪。我不知道如何使它工作,所以我一直在尝试做的是在名为animals.py的程序中定义它。
我有两个程序:animals.py和animalgenerator.py
The animal generator asks for user input and produces a list that looks like:
What type of animal would you like to create? Truman
What is the animal's name? Tiger
Would you like to add more animals (y/n)? n
Animal List
-----------
Tiger the Truman is hungry
到目前为止,我的计划已经奏效,但它不会产生情绪。 __mood是动物对象的隐藏属性。
check_mood:此方法应生成1之间的随机数 和3. 随机数将用于设置三种情绪之一:
如果数字为1,则__mood字段应设置为“happy”值。
如果数字为2,则__mood字段应设置为“饥饿”值。
如果数字为3,则__mood字段应设置为“困”字段。
最后,此方法应返回__mood字段的值
这是我在animals.py上的内容。
class Animal:
# The __init__ method initializes the attributes
def __init__(self, name, mood, type):
self.__name = name
self.__mood = mood
self.__animal_type = type
def _animal_type(self, type):
self.__animal_type = type
def __name(self, name):
self.__name = name
def __mood(self, mood):
for i in range():
if random.randint(1, 3) == 1:
self.__mood = 'happy'
if random.randint(1, 3) == 2:
self.__mood = 'hungry'
if random.randint(1, 3) == 3:
self.__mood = 'sleepy'
else:
self.__mood = 'happy'
def get_animal_type(self):
return self.__animal_type
def get_name(self):
return self.__name
def check_mood(self):
return self.__mood
以下是我对animalgenerator.py
的看法# This program tests the Animal class.
import animals
print("Welcome to the animal generator!")
print("This program creates Animal objects.")
def main():
# Get the animal data
animal_list = []
find_info = True
while(find_info):
_animal_type = input('\nWhat type of animal would you like to create? ')
__name = input('What is the animals name? ')
more_animals = input('Would you like to add more animals (y/n)? ')
if (more_animals != 'y'):
find_info = False
# Create an instance of animal class
animal_list.append(animals.Animal(_animal_type, __name, __mood))
animal = animals.Animal(_animal_type, __name, __mood)
# Display the data that was entered.
print('\nAnimal List\n')
print('------------- \n')
for animal in animal_list:
print('' + animal.get_animal_type() + ' the ' + animal.get_name() + ' is ' + animal.check_mood() + '\n')
# Call the main function
main()
答案 0 :(得分:0)
一些想法:首先,在__mood中你有for i in range():
但是范围需要至少1个参数。我想你可能根本不想那样,因为没有理由在那里循环我能看到。
其次,您可能无需为每项检查生成新的随机数。如果你一次从1到3生成随机int并查看它是1,2还是3,你应该能够设置你想要的心情。
第三,check_mood
永远不会致电__mood
让它产生新的心情。此外,我读取你的作业,呃,要求的方式,你应该在check_mood中生成随机数,然后将其传递给__mood而不是在其中生成。
第四,也许比上面的许多更重要,尤其是第三点,__ mood不能同时是方法名和属性名。可能你不希望__mood成为一种方法,只需将它的主体放在check_mood中。
答案 1 :(得分:0)
我相信这种方法可以优雅地写成1-2行:
def __setmood(self):
self.__mood = ('happy', 'hungry', 'sleepy')[random.randint(0, 2)]
return self.__mood
但除此之外,我认为您不应该为您的方法和实例变量使用相同的名称。当您执行self.__mood = 'happy'
之类的赋值时,实际上会覆盖对象方法的绑定。换句话说,即使在班级内也不能再调用self.__mood()
方法......
例如,以下代码将引发TypeError
('str' object is not callable
):
class X:
def __mood(self):
self.__mood = 'happy'
def callmood(self):
self.__mood()
return self
X().callmood().callmood()