【问题标题】:Is there a function to print the String of an object in an object?是否有一个函数可以在对象中打印对象的字符串?
【发布时间】:2019-01-14 09:07:41
【问题描述】:

所以我在做 OOP,我有一个 Zoo。我的动物园是一个拥有动物园管理员和动物的班级。这些动物具有属性“名称、喂食、喂食者”(str、bool、obj)。在我的 Zoo 终端上,动物园管理员可以使用我的程序。他可以: 喂养动物,检查是否喂养了一只动物,还可以列出所有动物。这就是我的问题发生的地方。 (请注意,我所有的动物现在都属于同一类,并被命名为“冰熊拉尔斯”或“小丑鱼尼莫”

当我检查一只动物时,我输入动物名称并调用我的 select_animal 方法。如果找到,则返回此动物的实例,如果未找到,则返回“无”。 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) 等等?

【问题讨论】:

  • 是动物园管理员和动物课程吗?
  • @doctorlove 正确。
  • 如果您需要帮助为它们编写字符串方法,我认为您需要显示您的类定义

标签: python python-3.x oop


【解决方案1】:

第一件事 Animal.feeder 是字符串类型,即 str,因此您无法访问根本不存在的属性 'name'。

第二件事 我不知道“animal_list”的类型是什么

假设如果它是一个 zoo 类的对象,那么你必须在类中编写方法 __str__(self) 这样

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

如果 animal_list 是列表,那么您可以通过print(animal_list) 打印它

【讨论】:

  • Animal.feeder 是一个对象,它是 feeder 的实例。
  • 什么样的对象?另一个班级?如果是这样,也给它一个__str__ 方法
  • 所以我有班级管理员和班级动物。类馈线只有一个名称。当 feeder 给动物喂食时,keeper 的实例存储在 animal.feeder 中。
【解决方案2】:

要控制类打印的内容,您可以实现魔术__str__ 方法,随心所欲。 这是: “由 str() 内置函数和 print 语句调用,以计算对象的“非正式”字符串表示。”

在类中添加一个返回所需字符串的方法,如下所示:

def __str__(self):
  return "Hi"

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

【讨论】:

  • 问题是,我的对象 [Mike,19,其他属性] 保存在 animal.feeder 中。在选项 c) 中,执行 str(selected_book.borrower.name) 没有问题,但在 b) 中,Book.borrower.name 由于某些奇怪的原因不起作用。
猜你喜欢
  • 2018-07-09
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
相关资源
最近更新 更多