我想创建一个set的子类,其行为类似于set,除了添加的每个元素都应该被转换为给定类型(如果不可能则引发Exception)。
在这个例子中,我展示了每个元素都被转换为str的集合。内部元素只能是str。我们添加的元素是str的caste。我们用于更新/交集/差异/联合....的迭代也被转换为str。
StrCastedSet = CastedSet(str)
mySet = StrCastedSet([1, 2, True, "test"])
print(list(mySet))
>>> ["1", "2", "True", "test"]
print(list(mySet.intersection([2, 3, "test"])))
>>> ["2", "test"]
print(2 in mySet)
>>> True
print((not False) in mySet)
>>> True
print(3 in mySet)
>>> False
当然,我可以专门覆盖每种方法。但我想知道是否可以编写一些聪明的装饰器来做到这一点。或者即使已经实施了这样的集合。