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

Python继承报错:缺少必需位置参数'self'问题求助

排查Python继承中「missing 1 required positional argument: 'self'」报错

先把你提供的代码贴出来方便分析:

model.py 代码

from priceChecker.priceChecker import db
class Model():
    def __init__(self, tableName):
        self.__tablename__ = tableName
    def getAll(self):
        #, conditions=[]
        try:
            print('Executing query for table: ' + self.__tablename__)
            result = db.execute("SELECT * FROM " + self.__tablename__)
            return result
        except ValueError:
            print("Oops, something went wrong sucker!...")

item.py 代码

from priceChecker.core.models.model import Model
class Item(Model):
    def __init__(self):
        print... # 你的代码没写完,但能看出重写了__init__方法

可能的报错原因及解决方法

原因1:直接用类调用了实例方法

这是触发这个报错最常见的原因。如果你的代码里是这么调用getAll的:

Item.getAll()

getAll是实例方法,必须通过类的实例来调用——Python会自动把实例对象作为self参数传入方法。直接用类调用的话,没有实例可以传,就会报self缺失的错误。

解决方法:先创建实例再调用方法

先初始化Item的实例,再通过实例调用getAll:

# 先创建Item实例(这里还要解决子类__init__的问题,看下面)
item_obj = Item()
# 通过实例调用方法
item_obj.getAll()

原因2:子类重写__init__时没调用父类的构造方法

你的Model类要求初始化时必须传入tableName来设置self.__tablename__,但Item类重写了__init__却没有调用父类的__init__方法。这会导致两个问题:

  1. Item实例里没有__tablename__属性,调用getAll时会触发新的报错;
  2. 父类的构造逻辑没执行,实例初始化不完整,也可能间接引发参数相关问题。

解决方法:在子类__init__中调用父类构造

修改Item类的代码,用super()调用父类的__init__并传入对应的表名:

from priceChecker.core.models.model import Model
class Item(Model):
    def __init__(self):
        # 调用父类的构造方法,传入Item对应的数据库表名,比如"items"
        super().__init__(tableName="items")
        # 这里可以写Item自己的初始化逻辑,比如你没写完的print语句
        print("Item instance initialized")

如果需要让外部灵活指定表名,也可以改成:

class Item(Model):
    def __init__(self, table_name="items"):
        super().__init__(tableName=table_name)
        # 自定义初始化逻辑

总结

先检查你是不是直接用Item.getAll()这种方式调用方法,如果是,改成实例调用;然后确保Item的__init__正确调用了父类的构造方法,传入必要的tableName参数。这两步改完,这个报错应该就能解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:21:40