如何制作 __eq__method 来比较 class 和 4 个初始变量?

How do I make an __eq__method to compare a class with 4 init variables?

我有以下 class:

class Building():
   def __init__(self, item1, item2, item3, item4):
       self._item1 = item1
       self._item2 = item2
       self._item3 = []
       self._item3.append(item3)
       self._item4 = []
       self._item4.append(item4)

  def __eq__(self, building2):

Item1 和item2 都是int 值,item3 和item4 都是列表,开头包含1 个项目,以后可能会添加更多。我如何比较两个建筑物 class 使得 building1 == building2 将 return 为真或为假。

编辑:感谢大家的反馈,我已经采纳了大家的意见并修改了我的代码,现在好多了谢谢!

def __eq__(self, building2):
  result1 = self.item1 == building2.item1
  result2 = self.item2 == building2.item2
  result3 = self.item3[0] == building2.item3[0]
  result4 = self.item4[0] == building2.item4[0]
  return result1 and result2 and result3 and result4

生成两个元组并比较它们:

def __eq__(self, building2):
    return (self._item1, self._item2, self._item3, self._item4) == (
        building2._item1, building2._item2, building3._item1, building4._item1)

您可以为要比较的那些属性构建元组,然后比较这些元组。确保检查另一个对象是否实际上是 Building 以避免引发 AttributeError

def __eq__(self, other):
    if not isinstance(other, Building):
        return False
    self_attrs = (self._item1, self._item2, self._item3, self._item4)
    other_attrs = (other._item1, other._item2, other._item3, other._item4)
    return self_attrs == other_attrs

您可以使用

__init__ 中创建属性 _items
self._items = self._item1, self._item2, self._item3, self._item4

然后定义__eq__

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

您可以使用内置 vars() 来比较对象的字典:

class Building():
    def __init__(self, item1, item2, item3, item4):
        self._item1 = item1
        self._item2 = item2
        self._item3 = []
        self._item3.append(item3)
        self._item4 = []
        self._item4.append(item4)

    def __eq__(self, building2):
        if not isinstance(building2, Building):
            return False
        return vars(self) == vars(building2)

b1 = Building(1, 2, 3, 4)
b2 = Building(1, 2, 3, 4)
b3 = Building(1, 2, 3, 3)
print(b1 == b2)
print(b1 == b3)

输出:

True
False