Question

D'une certaine façon, cela fonctionne très bien dans l'éditeur de script Maya / Python, mais échoue quand il est à l'intérieur de mon code de module. Quelqu'un at-il des idées?

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

Cela me donne un TypeError: super (type, obj):. Obj doit être une instance ou sous-type de type

Était-ce utile?

La solution 4

Il s'avère qu'il avait quelque chose à voir avec mes importations en haut du module. J'oublie que l'on était, cependant. J'ai posté ce moment je découvre ce qu'il était.

Autres conseils

Il doit faire avec des modules de rechargement. Rechargement un module change souvent l'objet interne en mémoire ce qui rend le test de isinstance de super retour Faux.

http://thingspython.wordpress.com / 2010/09/27 / autre super-rides de sensibilisation-TypeError /

J'ai eu ce même problème. Il est certainement pas pratique pour redémarrer MAYA chaque fois que vous faites un changement. J'ai trouvé un répondre qui a résolu ce problème pour moi.

Vous devriez lire la réponse liée à comprendre pourquoi son seul approprié pour le débogage. Mais brièvement, mettez ce code dans userSetup.py, chaque fois que vous modifiez votre code exécuté 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__)

Il est bonne règle si vous utilisez le super (classe, auto) .__ init__ que vous appelez toujours cette façon. Cela s'applique à vos classes qui héritent de l'objet.

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

Voir si cela résout votre erreur. Juste une supposition que je ne l'utilise MAYA, mais vaut le coup.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top