Python类方法触发TypeError:添加参数后错误消失的原因咨询
Python类方法参数报错的原因解析
问题场景
刚开始学习Python面向对象编程时,编写了一段测试类方法的代码,初始代码如下:
class Person: no_of_people = 0 def __init__(self, name): self.name = name Person.add_person() @classmethod def add_person(): no_of_people += 1 @classmethod def show_number(): return no_of_people
运行时触发如下错误:
TypeError: add_person() takes 0 positional arguments but 1 was given
给类方法添加参数后,错误消失且功能正常,修改后的代码:
class Person: no_of_people = 0 def __init__(self, name): self.name = name Person.add_person() @classmethod def add_person(h): h.no_of_people += 1 @classmethod def show_number(h): return h.no_of_people
原因解析
- 被
@classmethod装饰的方法,Python会自动把类本身作为第一个参数传递进去——这和实例方法自动接收实例作为第一个参数(通常命名为self)是同样的逻辑。 - 你最初定义的
add_person()和show_number()没有声明任何参数,但Python调用类方法时会默认传入类这个参数,参数数量不匹配就触发了TypeError。 - 修改后的代码给类方法加了参数
h(常规命名是cls,但名字不影响功能),这个参数会接收传递过来的Person类,所以能通过h.no_of_people正确访问类属性,方法也就可以正常执行了。
另外要注意:类方法里不能直接写no_of_people,必须通过类参数或者类名来访问,否则会被当作未定义的局部变量,同样会报错。
内容的提问来源于stack exchange,提问作者Rithin Yaser
相关产品推荐
相关产品推荐

