如何制作 __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
我有以下 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