在面向对象编程中打印字符串

printing a string in object oriented programming

我正在研究关于 Python 编程的 MOOC,并且很难找到问题集的解决方案。希望您能提供一些帮助。

问题陈述是: 此问题使用与上一问题相同的宠物、所有者和名称 类。

在这一篇中,您将打印一个列出单个主人的所有宠物的字符串,而不是打印一个列出单个宠物主人的字符串。

编写一个名为 get_pets_string 的函数。 get_pets_string 应该有一个参数,Owner 的一个实例。 get_pets_string 应该 return 根据以下格式列出该主人的宠物:

David Joyner 的宠物是:Boggle Joyner、Artemis Joyner

class Name:
    def __init__(self, first, last):
        self.first = first
        self.last = last

class Pet:
    def __init__(self, name, owner):
        self.name = name
        self.owner = owner
        
class Owner:
    def __init__(self, name):
        self.name = name
        self.pets = []

在此处添加您的 get_pets_string 功能!

这是我的代码:

def get_pets_string(Owner):
    result = Owner.name.first + " " + Owner.name.last + "'s" + " " + "pets are:"  + Pet.name
    return result

我的代码出现以下错误:

AttributeError: type object 'Pet' has no attribute 'name'
Command exited with non-zero status 1

下面是一些将测试您的函数的代码行。您可以更改变量的值以使用不同的输入测试您的函数。

如果您的功能正常工作,这将最初 打印: David Joyner 的宠物是:Boggle Joyner、Artemis Joyner 奥黛丽赫本的宠物是:皮聘赫本

owner_1 = Owner(Name("David", "Joyner"))
owner_2 = Owner(Name("Audrey", "Hepburn"))

pet_1 = Pet(Name("Boggle", "Joyner"), owner_1)
pet_2 = Pet(Name("Artemis", "Joyner"), owner_1)
pet_3 = Pet(Name("Pippin", "Hepburn"), owner_2)

owner_1.pets.append(pet_1)
owner_1.pets.append(pet_2)
owner_2.pets.append(pet_3)

print(get_pets_string(owner_1))
print(get_pets_string(owner_2))

您能否就我的代码做错了什么提供一些指导?

在您的代码中,namePet class 的实例变量。因此,要访问 Petname,您需要 Pet class 的 实例 。但是在 Pet.name 中的代码中,Pet 指的是 class,因为 Pet 中没有 class 变量 name class,显示上面的错误。

要解决此问题,您可以使用 Owner class 的成员 pets 表示 Pet 对象的列表。因此,在 get_pets_string() 中,您可以遍历 Ownerpets 成员并打印所有宠物的名称。

所以改成get_pets_string()后会变成-

def get_pets_string(owner):
    result = owner.name.first + " " + owner.name.last + "'s pets are: "  + ", ".join(p.name.first + " " + p.name.last for p in owner.pets)
    return result

这里我用了join()来显示所有宠物的名字,用逗号隔开