Ah, my mistake, super only works with "new style" classes - classes which inherit from 'object'.
Ie, if your base class is declared like: class myBaseClass: pass then it is an 'old style' class, and super won't work. If, on the other hand, it's like: class myBaseClass(object): pass (or it inherits from any built-in python class), then it's a new-style class, and super will work. You don't need to change up existing code, but going forward, it's probably a good idea to make your new classes 'new-style' classes, since future versions of python are getting rid of old-style classes. - Paul On Thu, Jun 18, 2009 at 1:08 PM, Sylvain Berger<[email protected]> wrote: > Chriss, it works, I forgot to add the self in texture.create(self,name=name) > Paul ... the first way works fine... but the second way returns this error: > # TypeError: super() argument 1 must be type, not classobj # > But the important thing it that it works! > Thanks everyone > On Thu, Jun 18, 2009 at 4:02 PM, Paul Molodowitch <[email protected]> > wrote: >> >> The problem is with this line: >> def create(self, name='file', addPlace2dTexture=True): >> >>>> self.create(name=name) <<<<< >> >> It's calling itself, creating an infinite recursive loop. >> What you want to do is call the parent class's implementation. There >> are two ways to do this: >> >> texture.create(self, name=name) # Explicitly invoke >> parent class by name >> >> This will work, but means you will potentially have problems if you >> ever change your inheritance hierarchy... >> >> super(file, self).create(name=name) # Use super to find >> next class in mro (method resolution order) >> >> This is the more general way - it uses super to find the next class in >> the mro. Unfortunately, you will potentially have problems if you use >> multiple inheritance - see http://fuhm.net/super-harmful/ for full >> details. >> >> - Paul >> >> On Thu, Jun 18, 2009 at 12:52 PM, sberger<[email protected]> wrote: >> > >> > Hi guys, I have this problem that i have no idea how to fix. >> > >> > I have a base class: >> > class texture(shadingNode): >> > def __init__(self, node=''): >> > shadingNode.__init__(self, node) >> > self.nodeType = 'texture' >> > def create(self, name='texture'): >> > return self.__init__(mc.shadingNode(self.nodeType, >> > asTexture=True, >> > name=name)) >> > >> > Then I have a second class that inherit from the first one. >> > Now I would like to override the create method to add an argument. >> > I have no idea how to create this method override >> > >> > This is what I have now... >> > class file(texture): >> > """ my maya file node class """ >> > def __init__(self, node=''): >> > texture.__init__(self, node) >> > self.nodeType = 'file' >> > self.place2dTexture = '' >> > self.setDefaultOutput('outColor') >> > def create(self, name='file', addPlace2dTexture=True): >> > self.create(name=name) >> > if addPlace2dTexture: >> > self.addPlace2dTextureNode() >> > return self >> > >> > But when I call it like that: >> > myFile = file().create() >> > >> > I get recursion error from python. >> > >> > Anyone know how to do this? >> > >> > > >> > >> >> > > > > -- > "A pit would not be complete without a Freeman coming out of it." > The Vortigaunt > > > > --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/python_inside_maya -~----------~----~----~----~------~----~------~--~---
