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

Python类中带参方法传参报TypeError的原因及解决方法

解决TypeError: writePost() got an unexpected keyword argument 'm_title'的问题

让我来帮你拆解这个问题,你遇到的报错其实是Python类方法定义的两个常见坑导致的,咱们一步步理清原因和解决方案:

报错核心原因

1. 实例方法缺少self参数

Python中,类的实例方法(就是你通过类的实例调用的方法)必须把self作为第一个参数(名称可以自定义,但行业惯例都用self)。这个参数的作用是接收调用该方法的实例对象——当你执行tistory.writePost(...)时,Python会自动把tistory这个实例作为第一个参数传递给方法。

如果你的方法没定义self,Python会把实例对象当成你传入的第一个位置参数,而你额外传的m_title关键字参数就会被视为“意外的参数”,直接触发TypeError。

2. 方法名拼写错误

你提到代码里方法被写成了wrtiePost(正确拼写应该是writePost),如果调用时用的是正确的writePost,那类里根本不存在这个方法,不过结合你的报错信息,这个拼写问题可能是额外的小问题,核心还是self参数缺失。

正确的类方法定义示例

下面是修复后的完整代码,你可以参考:

class Tistory:
    # 正确定义实例方法:第一个参数必须是self,之后是需要接收的业务参数
    def writePost(self, m_title, content="默认内容"):
        # 可以通过self访问实例的属性(如果有的话)
        # self.some_attribute = "xxx"
        print(f"正在发布文章:{m_title}")
        print(f"文章内容:{content}")

# 创建类的实例
my_tistory = Tistory()
# 调用方法,使用关键字参数传参(完全合法)
my_tistory.writePost(m_title="我的第一篇Tistory博客", content="这是博客正文内容")
# 也可以混合位置参数和关键字参数
my_tistory.writePost("第二篇博客", content="新的正文")

错误代码对比(为什么会报错)

看一下你可能写出的错误代码,对比就能更清楚问题所在:

class Tistory:
    # 错误:缺少self参数
    def wrtiePost(m_title):
        print(m_title)

tistory = Tistory()
# 调用时Python自动传入实例tistory作为第一个参数,而方法只定义了m_title
# 此时m_title被赋值为tistory实例,你又传了m_title="测试",相当于传了两个参数,直接报错
tistory.wrtiePost(m_title="测试")

总结正确做法

  • 所有类的实例方法,第一个参数必须是self,用来接收调用方法的实例对象。
  • 确保方法名拼写完全一致,调用和定义时不要出现笔误。
  • 在self之后定义你需要接收的业务参数,支持位置参数、关键字参数、默认参数等常规参数写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:54:17