Python: Классы обучения, отсутствующий аргумент позиции в списке классов

#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() .