在面向对象编程中打印字符串
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))
您能否就我的代码做错了什么提供一些指导?
在您的代码中,name
是 Pet
class 的实例变量。因此,要访问 Pet
的 name
,您需要 Pet
class 的 实例 。但是在 Pet.name
中的代码中,Pet
指的是 class,因为 Pet
中没有 class 变量 name
class,显示上面的错误。
要解决此问题,您可以使用 Owner
class 的成员 pets
表示 Pet
对象的列表。因此,在 get_pets_string()
中,您可以遍历 Owner
的 pets
成员并打印所有宠物的名称。
所以改成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()
来显示所有宠物的名字,用逗号隔开
我正在研究关于 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))
您能否就我的代码做错了什么提供一些指导?
在您的代码中,name
是 Pet
class 的实例变量。因此,要访问 Pet
的 name
,您需要 Pet
class 的 实例 。但是在 Pet.name
中的代码中,Pet
指的是 class,因为 Pet
中没有 class 变量 name
class,显示上面的错误。
要解决此问题,您可以使用 Owner
class 的成员 pets
表示 Pet
对象的列表。因此,在 get_pets_string()
中,您可以遍历 Owner
的 pets
成员并打印所有宠物的名称。
所以改成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()
来显示所有宠物的名字,用逗号隔开