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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:35:22