使父方法返回子类实例

时间:2015-01-09 21:59:25

标签: python inheritance python-3.x super

假设我希望将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没有看到,所以不确定这是否是实现我想要的正确方法。关注评论?

1 个答案:

答案 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