【问题标题】:Python: Learning classes, missing position argument in a list of classesPython:学习类,类列表中缺少位置参数
【发布时间】:2022-01-06 00:51:35
【问题描述】:

我对 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())

我得到一个类型错误,getType() 缺少 1 个位置参数:'self'。

【问题讨论】:

    标签: python list class


    【解决方案1】:

    你应该打电话给p.getType()

    p 是类的实例,而不是Pet

    【讨论】:

    • 非常感谢。所以据我了解,因为 p 只是列表的索引,我们需要引用我之前调用的实例的索引。基本上,我想我不应该这样称呼我的班级,而是它的实例?
    • p 指的是数组的每个元素。您想检查当前 instance 是否具有“狗”类型,而不是整个类。所以是的,你的理解是正确的。
    【解决方案2】:

    当您对listPets 中的项目使用p 变量时,您也应该在条件语句中使用p

    if Pet.getType() == "dog": 替换为if p.getType() == "dog":

    由于Pet 不是类的实例,当您为Pet 调用类的任何方法时,它会报错。

    【讨论】:

      【解决方案3】:

      类就像一个特殊的类型。当您创建一个类时,您实际上是在创建一个附加了一些特定功能的类型。现在,您可以制作这种类型的变量(对象)并用它做一些事情。所以,当你想对你的变量(这里的对象)做一些事情时,你使用你的变量而不是类型名(例如int + int)。为了更清楚一点,list 是一个类。假设您声明了一个列表 l = [1,2],现在将 3 附加到此列表中。你会写l.append(3) 而不是list.append(3)。那是您的代码中的错误Pet.getType()。你的变量是p,所以,你必须通过p调用p.getType()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-18
        • 2018-09-06
        • 2023-03-22
        • 2022-01-22
        • 2015-09-08
        • 1970-01-01
        • 2023-03-27
        • 2020-06-17
        相关资源
        最近更新 更多