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

Python调用类方法报missing 1 required positional argument: 'self'错误求解

问题排查与解决方案

报错根因

check_user_4是Welcome类的实例方法,Python的类实例方法默认要求第一个参数self为类的实例对象,必须通过Welcome类的实例.check_user_4()的方式调用,你在The_DB.create_connection中直接写Welcome.check_user_4()属于用类名直接调用实例方法,没有传入实例对象,因此触发参数缺失报错。

报错偶现的原因是该调用逻辑只有满足mystack[len(mystack)-1] == 'Welcome_check_user_3'条件才会执行,条件不触发时不会走到错误分支,因此表现为三次运行大概出现一次。

你其他场景调用正常是因为那些调用都是在Welcome类内部通过self.check_user_xxx()执行,self本身就是当前Welcome类的实例,自动传入了方法,因此不会报错。

修复方案

方案1(改造成本最低):将check_user_4声明为静态方法

由于你的check_user_4方法内部没有用到self相关的实例属性,可以直接加静态方法装饰器,不需要传入self参数:

class Welcome(Screen):
    # 其他代码保持不变
    @staticmethod
    def check_user_4():
        mystack.pop()
        mystack.append('Welcome_check_user_4')
        The_DB.get_control()
        mystack.pop()
        Global.theroot.current = 'scrMain'    

修改后原调用方式Welcome.check_user_4()可正常运行。

方案2:传递实例调用

如果后续check_user_4需要用到实例属性,可以在调用The_DB.create_connection时传入当前Welcome实例:

  1. 修改check_user_3中调用逻辑,传入self:
def check_user_3(self):
    # 其他代码不变
    The_DB.create_connection(self)
  1. 修改The_DB.create_connection接收实例参数,并用实例调用方法:
@staticmethod
def create_connection(welcome_instance):
    # 其他代码不变
    if mystack[len(mystack)-1] == 'Welcome_check_user_3':
        welcome_instance.check_user_4()

其他隐患修复建议

  • The_DB.create_connection当前也是无参数的实例方法写法,直接用类名调用也会触发缺self报错,建议也加上@staticmethod装饰器
  • 代码行.thecurse = Global.user_dbconn.cursor()前多了一个.,属于语法错误,需要删除
  • 尽量避免使用大量全局变量传递状态,改用类属性/实例属性存储,减少全局变量污染带来的不可预知bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:36:04