Python运行报AttributeError: 'function'对象无oracleCreate属性怎么解决?
问题根因
- 命名空间覆盖:你在
createClass.py的createpage方法内部定义了一个名为oracleCreate的回调函数,和顶部导入的oracleCreate模块重名。执行obj = oracleCreate.oracleCreate()时,此时的oracleCreate已经是本地定义的函数,不是导入的模块,自然找不到类定义报错。而SQLite逻辑中导入的模块是SQLiteCreate(首字母大写),内部回调函数是sqliteCreate(全小写),名称不重复所以运行正常。 - 业务逻辑错误:你在
oracleCreate.py的createTable方法里,错误实例化了DBconnect.SQLiteDB()类执行Oracle表创建,要么会走SQLite的创建逻辑,要么调用Oracle专属语法时直接报错。 - 循环导入隐患:
createClass.py导入了oracleCreate模块,oracleCreate.py又反过来导入createClass模块,属于循环导入,部分执行场景下也会触发类找不到的报错。
修复方案
- 修改
createClass.py里的Oracle按钮回调函数名,避免和导入模块重名,比如改成openOracleCreate:
# 原代码 def oracleCreate(): quit() obj = oracleCreate.oracleCreate() obj.createpage() # 修改后 def openOracleCreate(): quit() obj = oracleCreate.oracleCreate() obj.createpage() # 同步修改按钮绑定的command参数 oracle_but = Button(content, text="Oracle", command=openOracleCreate,width=15, height=2)
- 修正
oracleCreate.py里的数据库实例化逻辑,替换为Oracle对应的DB类:
# 原代码 obj = DBconnect.SQLiteDB() # 修改为DBconnect中定义的Oracle专属操作类,示例: obj = DBconnect.OracleDB()
- 可选优化循环导入问题:把两个模块互相依赖的部分抽离到公共工具模块,或者使用延迟导入(在需要调用的函数内部再导入对应模块)。
内容的提问来源于stack exchange,提问作者Isaac Stong
相关产品推荐
相关产品推荐

