通过Python中的属性比较对象实例的相等性

问题:

在Python中比较一些对象的两个实例来平等的最佳方法是什么?我想要做一些类似的事情
例:

doc1 = ErrorDocument(path='/folder',title='Page')
doc2 = ErrorDocument(path='/folder',title='Page')

if doc1 == doc2: # this should be True
    #do something

 编辑:
进一步澄清这个问题。我想通过属性值进行比较,并制作一个比较通用的解决方案

def __eq__(self, other):
    return self.path == other.path and self.title == other.title

__eq__()方法是否看起来像这样?

def __eq__(self, other):
    # Is the other instance of the same object
    # Loop through __dict__ and compare values to attributes of other

回答:

像Python一样,它是KISS

class Test(object):

    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2

    def __str__(self):
        return str(self.__dict__)

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

t1 = Test("foo", 42)
t2 = Test("foo", 42)
t3 = Test("bar", 42)

print t1, t2, t3
print t1 == t2
print t2 == t3

它输出:

{'attr2': 42, 'attr1': 'foo'} {'attr2': 42, 'attr1': 'foo'} {'attr2': 42, 'attr1': 'bar'}
True
False

N.B:请注意,在Python 3.0之前,您更可能使用__cmp__而不是__eq__,以同样的方式工作。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Compare object instances for equality by their attributes in Python

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

83 − = 80