我正在用“努力学习Python”来学习Python。编程对我来说是很新的。我在练习42。我被要求做以下工作:
Make some new relationships that are lists and dictionaries so you can also have "has-many" relationships.
我要程序打印弗兰克所有宠物的名字。但是,我得到一个错误,说'AttributeError: 'list' object has no attribute 'callpet'
。你知道吗
我知道问题是我用的是列表。当我写frank.pet = satan
的时候,一点问题都没有。但是我想让弗兰克养不止一只宠物,我想让程序打印出那些宠物的名字。你知道吗
这是我使用的完整代码:
class Person(object):
def __init__(self, name):
self.name = name
self.pet = None
def callme(self):
return self.name
def petsyay(self):
namepet = self.pet.callpet()
return namepet
class Pets(object):
def __init__(self, petname):
self.petname = petname
def callpet(self):
return self.petname
frank = Person("Frank")
poekie = Pets("Poekie")
satan = Pets("Satan")
frank.pet = [poekie, satan]
print frank.petsyay()
我的理解是我需要把名单分开什么的。所以我尝试了以下方法:
def callpet(self):
for eachpet in petname:
return self.petname
把它换成同样的错误。我很困惑,我做错什么了?你知道吗
问题是
frank.pet
是Pets
的list
。要做你想做的事,你必须重新定义petsyay
来处理宠物列表,并返回一个名字列表如果您想同时处理两个宠物列表或一个宠物列表,您可以处理异常
编辑后不正确(请注意,他的返回有时是一个宠物名,有时是一个宠物名列表,这是不好的):[如果你只为一个宠物调用E先生的答案,你很可能会收到一个错误
TypeError: 'Pets' object is not iterable
。他的答案只有在self.pets
是一个列表的情况下才有效,否则会失败。]如果您想同时支持单个和多个宠物,请始终确保您的
self.pet
是list
或确保在处理它们之前进行检查。Kepp记住,让一个常量类型的输出退出函数是很重要的,否则会使其他人的生活变得艰难。你知道吗我建议您将
self.pets
作为__init__
中的强制列表我调试了你的程序,结果是你的person对象中没有setPets方法,所以
self.pets
从来没有设置过pets列表。它总是None
。我添加了一个setPets方法,并更新了petsYay
方法以返回一个列表。您还可以使用yield
并返回一个生成器在类外部循环。更新代码如下:相关问题 更多 >
编程相关推荐