#python #list #class
#питон #Список #класс
Вопрос:
Я действительно новичок в Python, и у меня возникают трудности с занятиями. Я создал домашнее животное класса с атрибутами имени и типа.
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 позиционный аргумент: «я».
Ответ №1:
Тебе следовало бы позвонить p.getType()
p
является экземпляром класса, а не Pet
Комментарии:
1. Огромное спасибо. Итак, из того, что я понимаю, поскольку p-это просто индекс списка, нам нужно ссылаться на индекс, который является экземплярами, которые я называл ранее. В принципе, я думаю, что я не должен так называть свой класс, но его экземпляры?
2.
p
ссылается на каждый элемент массива. Вы хотите проверить, имеет ли текущий экземпляр тип «собака», а не весь класс. Так что да, ваше понимание верно.
Ответ №2:
Когда вы используете p
переменную для элементов в listPets
, вы также должны использовать 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
as p.getType()
.