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

