如何比较一个对象的两个实例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))
- Python 3.6.5
- 命令:pythonperson.py
- 错误信息
- 如果是缩进级别,则会显示以下错误
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 类型,除非您使用类型。
不少错误:
- 方法中的参数前面不能有
Person
类名
- 您尚未定义实例
person1
、person2
和 person3
- 如果您定义实例方法 (
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/
正在尝试比较两个对象的数据成员;但是,错误消息没有具体细节,这让我对如何更正错误信息知之甚少
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
- 命令:pythonperson.py
- 错误信息
- 如果是缩进级别,则会显示以下错误
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 类型,除非您使用类型。
不少错误:
- 方法中的参数前面不能有
Person
类名 - 您尚未定义实例
person1
、person2
和person3
- 如果您定义实例方法 (
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/