如何比较 Python 中的两个实例?

How to compare two instances in Python?

是否可以比较两个 'instances'?我有一个变量和一个列表。变量的类型为 'instance',列表中的项目也具有相同的类型。当我将变量与列表中的相同项目进行比较时:

cities = [USA, Poland, England, GB, Italy]
variable = Italy

variable == cities[-1]

我收到 'False' 作为输出。我 100% 确定这两个元素是相同的。

提前致谢!

Python 中有两种类型的对象。可变和不可变。

不可变

  • 无法更改状态。
  • 通常被认为是“原始”类型。
  • intfloatstringtuple

可变

  • 可以更新和更改状态。
  • listdictsetbytearray,通过 class 令牌创建的任何对象。

根据您在说 variable 时讨论的类型,这将影响运算符 ==。将始终根据实际值检查不可变类型(例如 1 == 1True),其中根据对象的 __eq__ 方法检查可变类型(重载 == 符号) .

列出的所有可变类型 - 除了用 class 初始化的新对象 - 都有一个内置的 __eq__ 方法,当出现 == 符号时使用。假设您使用的是自己的对象,以下面的例子为例:

class Obj:
    def __init__(self, integer):
        self.integer = integer

print(Obj(1) == Obj(1)) # False

请注意,尽管 integer 对于每个 Obj 都是相等的,但由于 Obj 是一个没有 __eq__ 方法的可变类型 Python 将根据对象在内存中的 space 检查对象是否彼此相等 - 换句话说,如果它是 True,则对象必须与您初始化的对象完全相同。

class Obj:
    def __init__(self, integer):
        self.integer = integer

obj = Obj(1)

print(obj == obj)  # True

要手动重载==符号,必须使用__eq__方法:

class Obj:
    def __init__(self, integer):
        self.integer = integer

    def __eq__(self, other):
        # Comparison of two integers.
        return self.integer == other.integer

print(Obj(1) == Obj(1))  # True