是否有功能在对象中打印对象的字符串?

时间:2019-01-14 09:07:41

标签: python python-3.x oop

所以我正在做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)等?

2 个答案:

答案 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"

(您想深入研究对象以找到要返回的实际字符串)