hehe you are so right. I changed my base class to use object, then it works! I always forget to derive from the object class... I need to get use to do this.
Thanks for the great help. It's nice to have python gurus like you guys On Thu, Jun 18, 2009 at 4:18 PM, Paul Molodowitch <[email protected]>wrote: > > 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 > > > > > > > > > > > -- "A pit would not be complete without a Freeman coming out of it." The Vortigaunt --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/python_inside_maya -~----------~----~----~----~------~----~------~--~---
