所以我正在做OOP,并且我有一个Zoo。我的动物园是一门饲养动物园管理员和动物的班级。动物具有“名称,进食,饲养者”属性(str,bool,obj)。在我的Zoo终端上,动物园管理员可以使用我的程序。他可以:喂养一只动物,检查是否喂养了一只动物,还可以列出所有动物。这是我的问题发生的地方。 (请注意,目前我所有的动物都属于同一类,并且被命名为“冰熊之子”或“小丑娘”。
当我检查一种动物时,我输入动物名称并调用我的select_animal方法。如果找到该动物,则返回该动物的实例;如果未找到,则返回“ none”。 elif'c',因为a和b是饲料动物,并列出所有动物。 check_animal检查是否已喂食。
elif(chosen_program == "c"):
selected_animal = select_animal()
checked_animal = first_zoo.check_aniaml(selected_animal)
if(checked_animal == True):
print(str(selected_animal.name) + " has been fed by " + str(selected_animal.keeper.name))
else:
print(selected_animal.name + " hasn't been fed yet!")
这很好。它的打印效果很好:“尚未喂养狮子辛巴”或“迈克已经喂养狮子辛巴”
当我打印列表时:
elif(chosen_program == "b"):
print("\nKeepers:")
for Keeper in first_zoo.keeper_list:
print(Keeper.name + ", ", end='')
print(Keeper.fed_animals) # fed animals is a list
print("\nAnimals:")
for Animal in first_zoo.animal_list: #
print(Animal.name + ", ", end='') #
print(str(Animal.fed) + ", ", end='') #bool
print(Animal.feeder) #pointer to the feeder, not a str!
这也可以,但是不像我想要的那样。如果我将print(Animal.feeder)放进去,它会打印“ Lars the Icebear,True,”
我只想打印名称,所以我尝试了在c)中使用print(Animal.feeder.name)
Exception has occurred: AttributeError
'str' object has no attribute 'name'
File "C:\Users\x\Google Drive\Files\Programs\python\Library\main.py", line 122, in <module>
print(Animal.feeder.name)
总结:这是我的问题。如何打印保管人的姓名。 python中是否有一个不错的函数,我可以在其中执行xprint(animal_list),它会给我(“ Lars the Icebear”,True,“ Mike”;“ Nemo the clownfisch”,False,none)等?
答案 0 :(得分:0)
第一件事 Animal.feeder的类型为字符串,即str,因此您无法访问根本不存在的属性“ name”。
第二件事 我不知道什么是“动物列表”
假设它是Zoo类的对象,那么您必须在此类中编写方法csv-parse/lib/sync
__str__(self)
如果animal_list是列表,则可以通过class zoo:
def __init__(self):
pass
def __str__(self):
'''create str here and return'''
temp = ""
for Animal in first_zoo.animal_list: #
temp += Animal.name + " "str(Animal.fed)+" "+Animal.feeder+"\n"
return temp
答案 1 :(得分:0)
要控制为某个类打印的内容,您可以实现神奇的__str__
方法,并随心所欲。
这是:
“由内置函数str()和print语句调用,以计算对象的“非正式”字符串表示形式。”
添加一种方法,该方法可在类中返回所需的字符串,如下所示:
def __str__(self):
return "Hi"
(您想深入研究对象以找到要返回的实际字符串)