Python类用__new__返回方法结果时,为何get_result需self参数?
问题分析与解决
错误原因
__new__方法参数错误:__new__是类的构造方法,第一个参数必须是cls(代表类本身),而非self(实例对象)。你代码里的self实际接收的是类A,不是实例。- 实例方法调用方式错误:
get_result是实例方法,必须通过类的实例来调用。你用类A直接调用get_result(),没有传入实例对象,所以会触发TypeError提示缺少self参数。 - 变量名拼写错误:
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
相关产品推荐
相关产品推荐

