You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Python中super()调用父类方法的疑问与使用困惑

Python中super()在该代码场景的作用解析

核心问题解答

  1. super().value_from_datadict()调用的是父类的普通实例方法
    它和构造函数__init__无关,value_from_datadict是父类Select2TagWidget中定义的一个普通实例方法,作用是从请求数据字典里提取对应的值。

  2. 为什么要用super()而不是直接self.value_from_datadict()?

    • 因为子类MyWidget已经**重写(覆盖)**了value_from_datadict方法。如果此时用self.value_from_datadict(),会递归调用子类自己的这个方法,直接陷入无限循环(当前方法里调用自己,永远出不去)。
    • super()的作用就是绕开子类的重写,明确调用父类版本的value_from_datadict方法,拿到父类处理后的原始值,再在子类里做二次加工(这里是把列表转成逗号分隔的字符串)。

代码逻辑拆解

这段代码是典型的扩展父类方法功能的场景:

class MyWidget(Select2TagWidget):
    def value_from_datadict(self, data, files, name):
        # 调用父类方法获取原始处理结果(比如列表形式的选中标签)
        values = super().value_from_datadict(data, files, name)
        # 在父类结果基础上,加工成逗号分隔的字符串返回
        return ",".join(values)

如果不用super(),直接写self.value_from_datadict(),程序会不断调用当前这个方法,最终触发栈溢出错误。

内容的提问来源于stack exchange,提问作者foxRun28

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:47:07