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

Python类用__new__返回方法结果时,为何get_result需self参数?

问题分析与解决

错误原因

  1. __new__方法参数错误:__new__是类的构造方法,第一个参数必须是cls(代表类本身),而非self(实例对象)。你代码里的self实际接收的是类A,不是实例。
  2. 实例方法调用方式错误:get_result是实例方法,必须通过类的实例来调用。你用类A直接调用get_result(),没有传入实例对象,所以会触发TypeError提示缺少self参数。
  3. 变量名拼写错误:get_result里写的是self._args_list,但前面定义的是_arg_list,少了一个s,即使前面的问题修复,这里也会引发AttributeError。

修正后的代码

class A():
    _arg_list = None
    
    def __new__(cls, my_args):
        # 创建类的实例
        instance = super().__new__(cls)
        # 给实例的_arg_list赋值
        instance._arg_list = my_args
        # 调用实例的get_result方法并返回结果
        return instance.get_result()
        
    def get_result(self):
        return self._arg_list[0]

调用A(['arg1','arg2'])时,会返回'arg1',符合预期。

补充说明

如果希望类的调用行为更像普通函数,也可以通过重载__call__方法实现,但这种场景下修正__new__的写法更直接。核心逻辑是:先通过__new__创建实例,再通过实例调用方法返回结果,而不是直接用类去调用实例方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 04:35:10