python - 让父方法返回子类实例

标签 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)) 那样包装返回集。之前没有见过,所以不确定这是否是实现我想要的目标的正确方法。愿意发表评论吗?

最佳答案

您可以做的一件事是根据 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/

相关文章:

python-3.x - 使用 VB.Net 通过 TCP 发送文件并使用 Python3.6 中的 Socket 接收时出现文件编码错误

python - 如何在 Python 中的这个嵌套字典中搜索特定键?

Python将包含嵌套json的字符串转换为dict

python - 获取标签列表,获取BeautifulSoup中的属性值

python - pandas.DataFrame.explode 产生太多行

python - 用于文件上传的 Flask/Apache 提交按钮

c++ - 在 C++ 中编写通用堆栈类

c# - 如何避免从基类构造函数调用虚方法

java - 在子类中引用抽象父类(super class)字段

python - 如何删除Python中的尾随空格?