Pregunta

De alguna manera, esto funciona bien en el editor de escritura maya / Python, pero falla cuando está dentro de mi código del 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 (tipo, obj):. Obj debe ser una instancia o subtipo de tipo

¿Fue útil?

Solución 4

Resulta que tenían algo que ver con mis importaciones en la parte superior del módulo. Yo recuerdo cuál era, sin embargo. Debería haber publicado este el momento en que descubrí lo que era.

Otros consejos

Tiene que ver con los módulos de recarga. Volver a cargar un módulo menudo cambia el objeto interno en la memoria lo que hace la prueba de isinstance Falso retorno súper.

http://thingspython.wordpress.com / 2010/09/27 / otra super-arrugas-levantando-TypeError /

tuve este mismo problema. Definitivamente, no es práctico para reiniciar maya cada vez que realice un cambio. He encontrado una respuesta aquí que resuelve este problema para mí.

Se debe leer la respuesta ligada a entender por qué su único adecuado para la depuración. Pero brevemente, poner este código en userSetup.py, entonces cada vez que se edita su reload_package de ejecución de códigos (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 buena regla general, si usted está utilizando el super (Clase, auto) .__ init__ que siempre lo llama de esta manera. Esto se aplica a las clases que heredan de objeto.

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

Ver si se ha solucionado el error. Sólo una suposición, ya que no utilizo maya, pero merece la pena intentarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top