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
相关产品推荐
相关产品推荐

