如何比较一个对象的两个实例Python?

How to compare two instances of an object Python?

正在尝试比较两个对象的数据成员;但是,错误消息没有具体细节,这让我对如何更正错误信息知之甚少

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))

same_person 是 class 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

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

您不必在 python 中定义 lhs 和 rhs 类型,除非您使用类型。

不少错误:

  1. 方法中的参数前面不能有Person类名
  2. 您尚未定义实例 person1person2person3
  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

其他答案是正确的,并提供了最好的方法,但我意识到你写道:

print calls provided as part of an exercise: not my implementation

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

该练习可能希望您在 class 之外定义一个函数。您可以通过从 class 中删除该函数并将其不缩进地写在 class 之外(也无需提供 class 类型)来实现。例如:

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))

你最好重写eq来比较对象:

class Person: 
    def __init__(self, name, age, id):
        self.name = name
        self.age = age
        self.id = id
    def __eq__(self, other):
        return self.id == other.id
person1 = Person("Bob", 25, 1)
person2 = Person("Mike", 33, 1)
person3 = Person("Maria", 28, 2)

print(person1 == person2)
print(person1 == person3)
>>> True
>>> False

https://devinpractice.com/2016/11/29/python-objects-comparison/