super函数在Maya Python模块中无法使用
不知道为什么,这在Maya/Python的脚本编辑器里运行得很好,但放到我的模块代码里就不行了。有没有人知道这是怎么回事?
class ControlShape(object):
def __init__(self, *args, **kwargs):
print 'Inside ControlShape...'
class Cross(ControlShape):
def __init__(self, *args, **kwargs):
print 'Entering Cross...'
super(Cross, self).__init__(*args, **kwargs)
print 'Leaving Cross...'
x = Cross()
这个代码让我遇到了一个类型错误:super(type, obj): obj必须是type的一个实例或者子类。
4 个回答
4
我也遇到过完全一样的问题。每次修改后都重启Maya实在太麻烦了。我在这里找到一个解决方案,这个方法对我很有效。
你可以看看那个链接的回答,了解为什么这个方法只适合调试。不过简单来说,你只需要把这段代码放到userSetup.py文件里,然后每次你修改代码后,运行reload_package(my_package)就可以了。
import sys, types
def reload_package(root_module):
package_name = root_module.__name__
# get a reference to each loaded module
loaded_package_modules = dict([
(key, value) for key, value in sys.modules.items()
if key.startswith(package_name) and isinstance(value, types.ModuleType)])
# delete references to these loaded modules from sys.modules
for key in loaded_package_modules:
del sys.modules[key]
# load each of the modules again;
# make old modules share state with new modules
for key in loaded_package_modules:
print 'loading %s' % key
newmodule = __import__(key)
oldmodule = loaded_package_modules[key]
oldmodule.__dict__.clear()
oldmodule.__dict__.update(newmodule.__dict__)
22
这跟重新加载模块有关。重新加载一个模块时,内存中的对象通常会发生变化,这就导致使用isinstance测试super时返回False。
http://thingspython.wordpress.com/2010/09/27/another-super-wrinkle-raising-typeerror/
0
原来这和我在模块顶部的导入有关。不过我忘了具体是哪一个了。我应该在发现问题的时候就把这个发出来。