测试类的不同实例的相等性

时间:2013-09-16 10:45:14

标签: python assert

我试图使用assert()检查一个简单类的内容,而无需检查该类的每个成员。有类似以下内容吗?

def class class_data(object):
    def __init__ (self, name = 'Richie', school = 'Jefferson High', age = 17):
        self.name = name
        self.school = school
        self.age = age


myschool = class_data()

#check for correct data via assert
assert (myschool == class_data('Fonzie', 'Lincoln High', 17))

如果我的问题是荒谬的,请原谅我,并提前多多感谢。

1 个答案:

答案 0 :(得分:4)

您需要在班级上定义__eq__方法。

执行myschool == other时,Python将调用myschool.__eq__(other),默认情况下,只检查两个对象是否相同(在您的情况下,它们不是)。

您可以覆盖__eq__以达到您的目的,这是一个示例:

def class class_data(object):
    def __init__ (self, name = 'Richie', school = 'Jefferson High', age = 17):
        self.name = name
        self.school = school
        self.age = age

    def __eq__(self, other):
        for attr in ("name", "school", "age"):
            if getattr(self, attr) != getattr(other, attr):
                return False
        return True

注意:使用getattr并不一定是最好的事情。您选择的实施取决于您。