Как сравнить два экземпляра объекта Python? - PullRequest
0 голосов
/ 01 сентября 2018

Попытка сравнить элементы данных двух объектов; однако в сообщении об ошибке нет конкретных подробностей, поэтому у меня мало информации о том, как его исправить

class Person: 
  def __init__(self, name, age, id):
    self.name = name
    self.age = age
    self.id = id

  def same_person(Person lhs, Person rhs):
    return lhs.id == rhs.id

person1 = Person("David Joyner", 30, 901234567)
person2 = Person("D. Joyner", 29, 901234567)
person3 = Person("David Joyner", 30, 903987654)
# print calls provided as part of an exercise: not my implementation
print(same_person(person1, person2))
print(same_person(person1, person3))
  • Python 3.6.5
  • Команда: python person.py
  • Сообщение об ошибке
  • SyntaxError
  • Если это был уровень отступа, отображается следующая ошибка
  • IndentationError

Ответы [ 4 ]

0 голосов
/ 01 сентября 2018

Другие ответы верны и дают лучший способ сделать это, но я понял, что вы написали:

вызовы на печать, предоставляемые в рамках упражнения: не моя реализация

print(same_person(person1, person2))
print(same_person(person1, person3))

В упражнении, вероятно, требуется, чтобы вы определили функцию вне класса. Вы можете сделать это, удалив эту функцию из класса и записав ее без отступа вне класса (без указания типа класса). Например:

class Person: 
    def __init__(self, name, age, id):
        self.name = name
        self.age = age
        self.id = id

def same_person(lhs, rhs):
    return lhs.id == rhs.id

person1 = Person("David Joyner", 30, 901234567)
person2 = Person("D. Joyner", 29, 901234567)
person3 = Person("David Joyner", 30, 903987654)

print(same_person(person1, person2))
print(same_person(person1, person3))
0 голосов
/ 01 сентября 2018
class Person: 
   def __init__(self, name, age, id):
      self.name = name
      self.age = age
      self.id = id

   def same_person(self, lhs, rhs):
      return lhs.id == rhs.id

вам не нужно определять тип lhs и rhs в python, если вы не используете наборы.

0 голосов
/ 01 сентября 2018

Довольно много ошибок:

  1. Аргументам в методе не может предшествовать Person имя класса
  2. Вы не определили экземпляры person1, person2 и person3
  3. Если вы определяете метод экземпляра (same_person), его следует использовать НА экземпляре.

Вот что я бы сделал:

class Person:
    def __init__(self, name, age, id):
        self.name = name
        self.age = age
        self.id = id

    def same_person(self, other):
        return self.id == other.id

person1 = Person("Bob", 25, 1)
person2 = Person("Mike", 33, 1)
person3 = Person("Maria", 28, 2)

print(person1.same_person(person2))
print(person1.same_person(person3))

Выход:

True
False
0 голосов
/ 01 сентября 2018

same_person является методом класса Person и должен принимать только аргумент в качестве входных данных. Он должен быть определен как:

def same_person(self, other):
    return self.id == other.id

и называется

person1.same_person(person2)

или вы можете переопределить метод __eq__ (т.е. ==).

def __eq__(self, other):
    return self.id == other.id

, чтобы можно было сделать это как person1 == person2

...