😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。
在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 = comment
class Derived(Base):
def __init__(self):
super().__init__() # 没有传递必需的参数给Base的构造函数
# 引发TypeError
new_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类的子类 FictionBook
class 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__里面加上self
Book.__init__(self,name,author,comment,state = 0)
self.type=type_