我是Python的新手,在类方面遇到了困难。我创建了一个具有名称和类型属性的类Pet。
class Pet:
def __init__(self, name, type):
self.name = name
self.type = type
def getName(self):
return self.name
def getType(self):
return self.type
def setName(self, name):
self.name = name
def setType(self, type):
self.type = type
def print(self):
print("{} is a {}".format(self.name, self.type))
我创建了实例?并将它们附加到列表中。
listPets = []
pet1 = Pet("Hobo", "dog")
pet2 = Pet("Pal", "dog")
pet3 = Pet("Meow", "cat")
listPets.append(pet1)
listPets.append(pet2)
listPets.append(pet3)
我的主要目标是打印宠物狗的名字。
for p in listPets:
if Pet.getType() == "dog":
print(p.getName())
我得到一个TypeError,getType((缺少1个位置参数:"self"。
您应该调用p.getType()
p
是类的实例,而不是Pet
当您对listPets
中的项使用p
变量时,您也应该在条件语句中使用p
。
将if Pet.getType() == "dog":
替换为if p.getType() == "dog":
由于Pet
不是类的实例,所以当您为Pet
调用类的任何方法时,它都会出错。
class就像一个特殊的类型。当你创建一个类时,你本质上是在创建一个附加了一些特定函数的类型。现在,你可以制作这种类型的变量(对象(并用它做一些事情。所以,当你想用你的变量(这里的对象(做一些事情时,你可以使用你的变量,而不是类型名(例如int + int
(。更清楚地说,list
是一个类。比方说,您声明了一个列表l = [1,2]
,现在将3附加到该列表中。你应该写l.append(3)
而不是list.append(3)
。这就是您的代码Pet.getType()
中的错误。您的变量是p
,因此,您必须将p
调用为p.getType()
。