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

Python类初始化报错TypeError: __init__() missing 1 required positional argument: 'lists'的原因解析

理解Python类实例化的参数要求及报错原因

首先咱们把报错的核心逻辑讲透:你最初定义的child类,它的构造方法__init__要求必须传入一个lists参数,但你用obj=child()创建实例时完全没传这个参数,所以Python直接抛出了「必填参数缺失」的错误。

接下来拆解背后的细节:

  • 当你用类名()创建实例时,Python会自动调用类里的__init__方法来初始化这个实例。这个方法里除了第一个固定的self(代表实例本身),其他定义的参数都是实例化时必须传入的必填参数。
    比如你最开始的类代码:

    import numpy as np  # 别忘了导入numpy,否则np会报错
    class child:
        def __init__(self,lists):
            self.myList = lists
        def find_mean(self):
            mean=np.mean(self.myList)
            return mean
    

    这里__init__明确要求传入lists,所以必须像obj=child([44,22,55])这样传值,Python才能把这个列表绑定到实例的self.myList属性上,后续find_mean方法才能直接用这个属性计算均值。

  • 你后来修改的类去掉了自定义的__init__方法,把列表参数移到了find_mean里:

    class child:
        def find_mean(self,myList):
            mean=np.mean(myList)
            return mean
    

    这时候Python会使用默认的无参数构造方法,所以obj=child()能正常创建实例——但这种方式下,每次调用find_mean都得手动传列表,和你最初想把列表绑定到实例、后续不用重复传值的逻辑完全不同。

如果你想保留最初的类定义逻辑(把列表绑定到实例),同时又希望实例化时可以选传参数(比如不传就用默认值),可以给__init__的lists参数加默认值,同时注意避免可变对象当默认参数的坑:

import numpy as np
class child:
    def __init__(self, lists=None):
        # 如果没传参数,就把myList设为空列表
        self.myList = lists if lists is not None else []
    def find_mean(self):
        # 处理空列表的情况,避免计算均值时报错
        if not self.myList:
            return 0  # 或者根据需求抛出提示信息
        mean = np.mean(self.myList)
        return mean

这样你既可以用obj=child([44,22,55])传列表创建实例,也可以用obj=child()创建带空列表的实例,后续调用find_mean都能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:52:39