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

Python从列表创建类时出现TypeError错误的问题求助

Python从列表创建类时出现TypeError错误的问题求助

嘿,我看了你的代码和报错信息,问题其实出在导入和类继承的混淆上,咱们一步步来解决:

错误原因解析

你在ClassA.py和ClassB.py里写了import BaseMethods,这时候BaseMethods指代的是整个模块文件,而不是模块里定义的BaseMethods类。当你尝试class ClassA(BaseMethods):的时候,相当于把模块当成父类来继承——但模块根本不是可被继承的类对象,这就触发了TypeError: module() takes at most 2 arguments (3 given)这个错误。

另外还有个小问题:main.py里导入ClassB的语句写错了,你写成了from ClassA import ClassB,这显然找不到正确的类。

修正后的代码

咱们逐个文件修改:

1. BaseMethods.py(原文件无问题,保持原样)

class BaseMethods:
    def setData(self, newData):
        self.moduleData = newData

    def getData(self):
        return self.moduleData

2. ClassA.py(修正导入语句)

# 改成直接导入类,而不是模块
from BaseMethods import BaseMethods

class ClassA(BaseMethods):
    moduleId = None
    moduleData = None

    def __init__(self, moduleId, initData):
        super().__init__()
        self.moduleId = moduleId
        self.setData(initData)

3. ClassB.py(同样修正导入语句)

from BaseMethods import BaseMethods

class ClassB(BaseMethods):
    moduleId = None
    moduleData = None

    def __init__(self, moduleId, initData):
        super().__init__()
        self.moduleId = moduleId
        self.setData(initData)

4. main.py(修正ClassB的导入路径)

import random
from ClassA import ClassA
# 这里改成从ClassB.py导入ClassB
from ClassB import ClassB

myModules = {
    'module__1': ClassA,
    'module__2': ClassB,
}

interfaces = {}

def main():
    for moduleKey, moduleObj in myModules.items():
        initData = random.randint(0, 100)
        interfaces[moduleKey] = moduleObj(moduleKey, initData)
    
    for intKey, interface in interfaces.items():
        print(intKey, '=>', interface.getData())

if __name__ == '__main__':
    main()

测试效果

现在运行main.py,就能正常输出每个模块的ID和对应的随机数据了,比如类似这样的结果:

module__1 => 42
module__2 => 78

备注:内容来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:18:06