我在写maya类的时候遇到,版本python2.7
- folder
- lib
- mayaclass.py
- base类
- A(base)类
- ui.py
- mayaclass.py
- lib
其中A继承base
ui.py文件中内容
#python2.7
import imp
from folder.lib import mayaclass
imp.reload(mayaclass)
from folder.lib.mayaclass import *
为了测试需要,我在控制台执行
import imp
from folder.lib import mayaclass
imp.reload(mayaclass)
from folder.lib.mayaclass import *
from folder import ui
imp.reload(ui)
此时在控制台建立对象会报错
A()
TypeError: super(type, obj): obj must be an instance or subtype of type
意思是说没有继承关系
可能原因是 文件中再次导入了一遍mayaclass 中的类
导致内存中两份类不一样,建立子类失败
如果在控制台中去掉文件中导入的那部分就神奇的不会报错
import imp
from folder.lib import mayaclass
imp.reload(mayaclass)
from folder.lib.mayaclass import *
#from folder import ui # 文件中再次导入了一遍mayaclass 中的类,导致出现不一致的情况
#imp.reload(ui)
如果换成python3.7也会报错,但是将
super(类名,self).__init__()
替换成
super().__init__()
就不会报错
哪个大神能深入解答原因,是不是reload导致的