更新自定义集类时,它会被覆盖/设置回内置



我有一个自定义的类,它可以读写文件,否则应该像普通集一样。

class FileSet(set):
def __init__(self, file):
self.file = file
self.elements = {line.strip() for line in open(self.file, "r")}
super().__init__(self.elements)
def load(self):
self.elements = {line.strip() for line in open(self.file, "r")}
super().__init__(self.elements)
def save(self):
with open(self.file, "w") as f:
f.write("n".join(list(self)))

当将-=|=与其他FileSet对象组合使用时,它们仍然是File Sets。然而,当使用进行更新时,它们再次变为正常的集合,并且我的自定义方法停止工作。print(type(obj))将在用集合更新之前说<class '__main__.FileSet'>,在更新之后说<class 'set'>

有办法解决这个问题吗?

编辑:问题仅出现在使用dict.keys()(<class 'dict_keys'>)集更新FileSet时。。。否则工作正常,可以通过用set(dict.keys())封装dict.keys()来修复

编辑:感谢大家,尤其是@chepner:)

干杯,julius

我在这里键入了一个问题及其解决方案set(dict.keys())的快速示例:

dictionary = {"apple": ["fruit", "company"], "house": ["building", "famous doctor"]}
>>> f = FileSet("queue")
>>> print(f)
FileSet({'jumbo', 'dumbo'})
>>> type(f)
<class '__main__.FileSet'>
>>> f |= set(dictionary.keys())
>>> type(f)
<class '__main__.FileSet'>
>>> f
FileSet({'house', 'jumbo', 'dumbo', 'apple'})
>>> f |= dictionary.keys()
>>> type(f)
<class 'set'>

相关内容

  • 没有找到相关文章

最新更新