La super función no funciona dentro de un módulo de python maya

De alguna manera, esto funciona bien en el editor de script Maya / Python, pero falla cuando está dentro de mi código de módulo. ¿Alguien tiene alguna idea?

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() 

Esto me da un TypeError: super (type, obj): obj debe ser una instancia o subtipo de tipo.

Tiene que ver con recargar módulos. La recarga de un módulo a menudo cambia el objeto interno en la memoria, lo que hace que la prueba de instancia de súper retorno sea Falso.

http://thingspython.wordpress.com/2010/09/27/another-super-wrinkle-raising-typeerror/

Tuve exactamente el mismo problema. Definitivamente no es práctico reiniciar maya cada vez que realice un cambio. Encontré una respuesta aquí que resolvió este problema para mí.

Debería leer la respuesta vinculada para comprender por qué solo es adecuado para la depuración. Pero brevemente, ponga este código en userSetup.py, luego cada vez que edite su código ejecute 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__) 

Es una buena regla general si está usando el super (Clase, uno mismo) .__ init__ que SIEMPRE lo llame de esta manera. Esto se aplica a sus clases que heredan de objeto.

 class ControlShape(object): def __init__(self, *args, **kwargs): super(ControlShape, self).__init__() print 'Inside ControlShape...' 

Vea si eso corrige su error. Solo una conjetura ya que no uso maya, pero vale la pena intentarlo.

Resulta que tuvo algo que ver con mis importaciones en la parte superior del módulo. Sin embargo, me olvido de cuál era. Debería haber publicado esto en el momento en que descubrí lo que era.