尝试更新现有设置时“不可用类型:设置”?

时间:2015-05-07 12:26:14

标签: python python-3.x set

这里解释不多,我试图以递归方式获取一个类的所有子类的集合:

@classmethod
def get_subclasses(cls):
    subclasses = set(cls.__subclasses__())
    subclasses.update(sub.get_subclasses() for sub in subclasses)
    return subclasses

它从TypeError: unhashable type: 'set'行引发错误.update()

为什么呢?如何“修复”?

1 个答案:

答案 0 :(得分:0)

您正在尝试将套装添加到您的套装中。集合只能用hashable类型填充 - set不是其中之一(它是一个可变类型,它不应该是真的可以使用 - 你也可以出于同样的原因使用列表 - 尽管你可以使用元组)。

无论如何,我认为意图和你的代码可能没有对齐......

如果我理解你的意图,你可能会更好地写下这个简写:

subclasses = set()
for parent_sub in set(cls.__subclasses__()):
    subclasses.add(parent_sub)
    for child_sub in parent_sub.get_subclasses():
        subclasses.add(child_sub)

return subclasses 

我认为,应该在层次结构中为您提供所有类的平面集合?