? 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。
? 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。
? 同时洲洲已经建立了程序员技术交流群,如果您感兴趣,可以私信我加入社群,可以直接vx联系(文末有名片)v:bdizztt
? 随时欢迎您跟我沟通,一起交流,一起成长、进步!点此也可获得联系方式~
本文目录
一、问题背景二、定位错误原因原因一:构造函数参数缺失 原因二:错误的类继承原因三:错误的参数顺序 三、解决方案方案一:确保构造函数参数完整方案二:正确处理类继承方案三:确保参数顺序正确 过程中的注意事项总结
一、问题背景
在Python中,TypeError通常发生在函数或构造函数调用时参数不匹配的情况下。
特别是,TypeError: init() missing 1 required positional argument: 'comment’这个错误表明在创建某个类的实例时,构造函数__init__()缺少了一个必需的位置参数comment。
这种情况通常发生在定义类时,构造函数需要接收一个或多个参数,但在创建类的实例时没有提供足够的参数。
二、定位错误原因
原因一:构造函数参数缺失
错误示例:
class Comment: def __init__(self, comment): self.comment = comment# 缺少必需的参数new_comment = Comment() # 引发TypeError
self代表实例化对象本身
①、类的方法内部调用其他方法时,我们也需要用到 self 来代表实例
②、类中用 def 创建方法时,就必须把第一个参数位置留给 self,并在调用方法时忽略它(不用给self传参)
③、类的方法内部想调用类属性或其他方法时,就要采用 self.属性名 或 self.方法名 的格式
原因二:错误的类继承
如果一个类继承自另一个需要特定参数的类,但没有正确传递这些参数,也会引发这个错误。
错误示例:
class Base: def __init__(self, comment): self.comment = commentclass Derived(Base): def __init__(self): super().__init__() # 没有传递必需的参数给Base的构造函数# 引发TypeErrornew_derived = Derived()
原因三:错误的参数顺序
如果构造函数的参数顺序与调用时提供的不一致,也可能导致这个错误。
错误示例:
class Comment: def __init__(self, comment, author): self.comment = comment self.author = author# 参数顺序错误new_comment = Comment("Great post!", "Alice") # 引发TypeError,如果定义中author在comment之前
三、解决方案
方案一:确保构造函数参数完整
在创建类的实例时,确保提供所有必需的参数。
正确示例:
new_comment = Comment("This is a great article!") # 正确提供必需的参数
方案二:正确处理类继承
如果类继承自另一个类,确保在子类的构造函数中正确传递所有必需的参数给父类的构造函数。
代码示例:
class Derived(Base): def __init__(self, comment): super().__init__(comment) # 正确传递参数给Base的构造函数new_derived = Derived("Nice work!") # 正确创建Derived的实例
方案三:确保参数顺序正确
在调用构造函数时,确保参数的顺序与定义时一致。
正确示例:
new_comment = Comment("Alice", "Great post!") # 假设author在comment之前定义
过程中的注意事项
我们来看看一个错误示例:
class Book: def __init__(self, name, author, comment, state = 0): self.name = name self.author = author self.comment = comment self.state = state # 创建一个Book类的子类 FictionBookclass FictionBook(Book): def __init__(self,name,author,comment,state = 0,type_='虚构类'): # 继承并定制父类的初始化方法,增加默认参数 type = '虚构类',让程序能够顺利执行。 Book.__init__(name,author,comment,state = 0) self.type=type_ def __str__(self): status = '未借出' if self.state == 1: status = '已借出' return '类型:%s 名称:《%s》 作者:%s 推荐语:%s\n状态:%s ' % (self.type, self.name, self.author, self.comment, status)book = FictionBook('囚鸟','冯内古特','我们都是受困于时代的囚鸟')print(book)
显示报错:
line 13, in __init__ Book.__init__(name,author,comment,state = 0)TypeError: __init__() missing 1 required positional argument: 'comment'
解决方案:
Book.__init__里面加上selfBook.__init__(self,name,author,comment,state = 0) self.type=type_
总结
?Hello,各位看官老爷们好,我已经建立了CSDN技术交流群,如果你很感兴趣,可以私信我加入我的社群。
?社群中不定时会有很多活动,例如每周都会包邮免费送一些技术书籍及精美礼品、学习资料分享、大厂面经分享、技术讨论谈等等。
?社群方向很多,相关领域有Web全栈(前后端)、人工智能、机器学习、自媒体副业交流、前沿科技文章分享、论文精读等等。
?不管你是多新手的小白,都欢迎你加入社群中讨论、聊天、分享,加速助力你成为下一个大佬!
?想都是问题,做都是答案!行动起来吧!欢迎评论区or后台与我沟通交流,也欢迎您点击下方的链接直接加入到我的交流社群!~ 跳转链接社区~