Python - 无法定义用户定义对象集

时间:2017-07-03 19:09:18

标签: python set

我收到以下错误

    all_rots = set([rot1, rot2])
TypeError: an integer is required

我的代码只是

rot1 = SimpleClass(mapping={1:1, 2:2})
rot2 = SimpleClass(mapping={2:2, 1:1})
all_rots = set([rot1, rot2])

(这是在单元测试中)

SimpleClass类是

class SimpleClass(object):
    def __init__(self, mapping):
        self._mapping = mapping


    @property
    def mapping(self):
        return self._mapping


    def __getitem__(self, key):
        return self.mapping[key]

    def __hash__(self):
        return sorted(list(self.mapping.iteritems()))

    def __eq__(self, other):
        if type(other) is type(self):
            return self.__dict__ == other.__dict__
        return False

任何人都知道我为什么不能构建我的对象集?

1 个答案:

答案 0 :(得分:2)

__hash__应该返回一个不是列表的整数。

您可以从排序列表中创建一个不可变/可散列类型(例如元组)并返回该散列:

def __hash__(self):
    return hash(tuple(sorted(self.mapping.items())))
rot1 = SimpleClass(mapping={1:1, 2:2})
rot2 = SimpleClass(mapping={2:2, 1:1})
all_rots = set([rot1, rot2])
print all_rots
# set([<Rotation object at 0x7f737e5ef210>])