假设我希望将Python set
子类化为更改difference
方法,如下所示:
class my_set(set):
def difference(self, ls):
ls.append(1)
return super().difference(ls)
现在假设我还将my_method
添加到了my_set
,我希望通过调用difference
来调用它:
my_instance = my_set([1,2,3])
my_instance.difference([2,3]).my_method()
由于差异方法返回的集合不是my_set
类型而是常规set
,因此上述工作不会奏效。什么是绕过这个的pythonic方式,而不必每次都通过my_set(my_instance.difference([2,3])).my_method()
转换返回的集合?
修改
我刚刚意识到我可以像return my_set(super().difference(ls))
那样包装返回集。在此之前,Haven没有看到,所以不确定这是否是实现我想要的正确方法。关注评论?
答案 0 :(得分:1)
您可以做的一件事是从my_set
的结果创建super().difference(ls)
对象:
class my_set(set):
def difference(self, ls):
ls.append(1)
return my_set(super().difference(ls)) # <---
def my_method(self):
print("StackOverflow")
my_instance = my_set([1,2,3])
my_instance.difference([2,3]).my_method() # CORRECT