这里解释不多,我试图以递归方式获取一个类的所有子类的集合:
@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()
。
为什么呢?如何“修复”?
答案 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
我认为,应该在层次结构中为您提供所有类的平面集合?