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
相关产品推荐
相关产品推荐

