假设我希望子类化 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)) 那样包装返回集
。之前没有见过,所以不确定这是否是实现我想要的目标的正确方法。愿意发表评论吗?
最佳答案
您可以做的一件事是根据 super().difference(ls)
的结果创建一个 my_set
对象:
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
关于python - 让父方法返回子类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27869933/