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

Python代码报错:__init__()仅接受1个位置参数但传入了2个

问题排查:TypeError: init() takes 1 positional argument but 2 were given

问题场景

抛出异常的代码片段:

def post(self, tagname):
    parser = reqparse.RequestParser()
    parser.add_argument('active', type=int, required=False, help="active required")
    parser.add_argument('desc', type=str, required=True, help="desc required")
    parser.add_argument('product', type=str, required=False, help="product optional")
    data = parser.parse_args()

    if t is None: #Tag exists - cannot create new Tag
        print(f"User does not exist - creating a new Tag")
        t = Tag(data).insert()
        return t.json(), 201 

Tag类构造函数定义:

class Tag(sql_al_db.Model):
    __tablename__ = 'tags'
    id = sql_al_db.Column(sql_al_db.Integer, primary_key=True)
    tagname = sql_al_db.Column(sql_al_db.String(80))
    active = sql_al_db.Column(sql_al_db.Integer)
    desc = sql_al_db.Column(sql_al_db.String(120))
    product = sql_al_db.Column(sql_al_db.String(120))

    def __init__(self, **kwargs):
        super(Tag, self).__init__(**kwargs)
        for key in ('tagname', 'active', 'desc', 'product'):
            if key in kwargs:
                setattr(self, key, kwargs[key])
        print("Set kwargs like so after initiating object")
        pprint(kwargs)

异常堆栈信息:

line 72, in post
t = Tag(data).insert()
TypeError: __init__() takes 1 positional argument but 2 were given

问题原因

Tag类的__init__方法仅接受关键字参数(**kwargs),但调用Tag(data)时,你将data作为位置参数传入——相当于给__init__传了两个参数:默认的self,以及data,这与方法定义的参数规则冲突,因此触发错误。

另外,post方法接收的tagname参数未被传入Tag实例,会导致Tag对象的tagname字段为空,不符合业务逻辑。

解决方案

  1. 将位置参数改为关键字参数传递,使用**解包data字典:
# 先把tagname加入data字典
data['tagname'] = tagname
# 解包字典为关键字参数传入
t = Tag(**data).insert()
  1. 简化Tag类(可选):SQLAlchemy的Model父类已经实现了关键字参数赋值逻辑,自定义的__init__方法可以完全移除,直接使用父类逻辑即可:
class Tag(sql_al_db.Model):
    __tablename__ = 'tags'
    id = sql_al_db.Column(sql_al_db.Integer, primary_key=True)
    tagname = sql_al_db.Column(sql_al_db.String(80))
    active = sql_al_db.Column(sql_al_db.Integer)
    desc = sql_al_db.Column(sql_al_db.String(120))
    product = sql_al_db.Column(sql_al_db.String(120))

# 无需自定义__init__方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:06:25