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

Python3多继承场景下父类初始化报TypeError 如何正确实现初始化?

错误原因
  • super()传参逻辑错误:super(Base, self).__init__(token=token)的作用是调用Base类的父类(即Python根类object)的初始化方法,而object.__init__()不接受任何入参,你传入token关键字参数自然触发类型错误。
  • 多继承初始化参数不兼容:你的两个父类Base和PublicUser的初始化入参格式完全不同,默认的super()链式调用逻辑无法适配这种场景。
最优解决方案

直接显式调用两个父类的构造方法,避开多继承方法解析顺序(MRO)的隐藏坑,逻辑清晰且完全适配你的需求,仅需修改user.py中User类的初始化逻辑即可:

from .base import Base

PUBLIC_USER_ATTRS = ['id', 'username']
PRIVATE_USER_ATTRS = ['email']


class PublicUser:
    def __init__(self, user):
        for k in PUBLIC_USER_ATTRS:
            setattr(self, k, user[k])


class User(Base, PublicUser):
    def __init__(self, token=None):
        # 显式调用Base父类初始化
        Base.__init__(self, token=token)
        # 显式调用PublicUser父类初始化
        PublicUser.__init__(self, self._user)
        # 赋值私有用户属性
        for k in PRIVATE_USER_ATTRS:
            setattr(self, k, self._user[k])
可选优化建议
  • 可删除base.py中无用的导入语句:from requests.sessions import session
  • 如果后续需要复用公开用户属性的逻辑,可将PublicUser改为Mixin类,命名调整为PublicUserMixin更符合Python开发规范。

内容的提问来源于stack exchange,提问作者Zeno Dalla Valle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 08:06:08