我有一个自定义的集类,它可以读写文件,否则应该像普通集一样。
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'>