前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【已解决】Python解决TypeError: __init__() missing 1 required positional argument: ‘comment‘报错

【已解决】Python解决TypeError: __init__() missing 1 required positional argument: ‘comment‘报错

作者头像
程序员洲洲
发布2024-06-14 13:05:08
1730
发布2024-06-14 13:05:08
举报
文章被收录于专栏:项目文章项目文章

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。

一、问题背景

在Python中,TypeError通常发生在函数或构造函数调用时参数不匹配的情况下。 特别是,TypeError: init() missing 1 required positional argument: 'comment’这个错误表明在创建某个类的实例时,构造函数__init__()缺少了一个必需的位置参数comment。 这种情况通常发生在定义类时,构造函数需要接收一个或多个参数,但在创建类的实例时没有提供足够的参数。

二、定位错误原因

原因一:构造函数参数缺失

错误示例:

代码语言:javascript
复制
class Comment:
    def __init__(self, comment):
        self.comment = comment

# 缺少必需的参数
new_comment = Comment()  # 引发TypeError

self代表实例化对象本身

①、类的方法内部调用其他方法时,我们也需要用到 self 来代表实例

②、类中用 def 创建方法时,就必须把第一个参数位置留给 self,并在调用方法时忽略它(不用给self传参)

③、类的方法内部想调用类属性或其他方法时,就要采用 self.属性名 或 self.方法名 的格式

原因二:错误的类继承

如果一个类继承自另一个需要特定参数的类,但没有正确传递这些参数,也会引发这个错误。

错误示例:

代码语言:javascript
复制
class Base:
    def __init__(self, comment):
        self.comment = comment

class Derived(Base):
    def __init__(self):
        super().__init__()  # 没有传递必需的参数给Base的构造函数

# 引发TypeError
new_derived = Derived()

原因三:错误的参数顺序

如果构造函数的参数顺序与调用时提供的不一致,也可能导致这个错误。

错误示例:

代码语言:javascript
复制
class Comment:
    def __init__(self, comment, author):
        self.comment = comment
        self.author = author

# 参数顺序错误
new_comment = Comment("Great post!", "Alice")  # 引发TypeError,如果定义中author在comment之前

三、解决方案

方案一:确保构造函数参数完整

在创建类的实例时,确保提供所有必需的参数。

正确示例:

代码语言:javascript
复制
new_comment = Comment("This is a great article!")  # 正确提供必需的参数

方案二:正确处理类继承

如果类继承自另一个类,确保在子类的构造函数中正确传递所有必需的参数给父类的构造函数。

代码示例:

代码语言:javascript
复制
class Derived(Base):
    def __init__(self, comment):
        super().__init__(comment)  # 正确传递参数给Base的构造函数

new_derived = Derived("Nice work!")  # 正确创建Derived的实例

方案三:确保参数顺序正确

在调用构造函数时,确保参数的顺序与定义时一致。

正确示例:

代码语言:javascript
复制
new_comment = Comment("Alice", "Great post!")  # 假设author在comment之前定义

过程中的注意事项

我们来看看一个错误示例:

代码语言:javascript
复制
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)

显示报错:

代码语言:javascript
复制
line 13, in __init__
    Book.__init__(name,author,comment,state = 0)
TypeError: __init__() missing 1 required positional argument: 'comment'

解决方案:

代码语言:javascript
复制
Book.__init__里面加上self

Book.__init__(self,name,author,comment,state = 0)
        self.type=type_
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、问题背景
  • 二、定位错误原因
    • 原因一:构造函数参数缺失
    • 原因二:错误的类继承
      • 原因三:错误的参数顺序
      • 三、解决方案
        • 方案一:确保构造函数参数完整
          • 方案二:正确处理类继承
            • 方案三:确保参数顺序正确
            • 过程中的注意事项
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档