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

Python类实例化报错求助:缺少必填位置参数

问题排查与修复

报错核心原因

你的代码触发TypeError是因为person类的__init__方法要求必须传入_name参数,但你在实例化时(p1 = person()和main里的p = person())都没有传这个必填参数。除此之外代码还有几处逻辑问题需要调整:

  • __init__方法中赋值顺序错误:先把未初始化的_name赋值给self.name,再给_name赋值sys.argv[1],导致self.name无法拿到正确的命令行输入
  • hello方法直接调用sys.argv[1],没有利用类的name属性,不符合类的封装设计
  • 全局作用域中的p1 = person()会在脚本启动时优先执行,同样会触发参数缺失错误,属于冗余代码

修正后的代码

import sys

class person():
    def __init__(self, _name):
        self.name = _name  # 用传入的参数初始化实例属性
    def hello(self):
        # 使用实例的name属性输出,而非直接依赖命令行参数
        print(f"My name is {self.name} and I am a {self.__class__.__name__}")

def main():
    # 从命令行获取名字,作为参数传入person实例
    p = person(sys.argv[1])
    p.hello()
    print(type(p))

if __name__ == "__main__":
    main()

运行方式

执行脚本时需要在命令行传入名字参数,示例:

python classname.py Obi-Wan

预期输出

My name is Obi-Wan and I am a person
<class '__main__.person'>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:18:18