Bernard Lebel wrote: > Hello, > > I have this problem when subclassing classes where I get this error: > > Traceback (most recent call last): > > File "<Script Block >", line 344, in BBExportElementGranules_Execute > from bb_pipeline import bb_exportelementgranules > > File > "\\Linuxserver\ANIMATION\XSI\WORKGROUP_ANIMATION\Data\Scripts\bb_pipeline\bb_exportelementgranules.py", > line 101, in ? > oWriter = bbExportGranules() > > File > "\\Linuxserver\ANIMATION\XSI\WORKGROUP_ANIMATION\Data\Scripts\bb_pipeline\bb_granules\bb_granuleexport\bb_granuleexport_element.py", > line 73, in __init__ > bbExportMeta.__init__( self ) > > TypeError: unbound method __init__() must be called with bbExportMeta > instance as first argument (got bbExportGranules instance instead) > - [line 343 in > \\Linuxserver\ANIMATION\XSI\WORKGROUP_ANIMATION\plugins\bb_pipeline\bb_pipeline_py.py] > > > In normal English: > > I have class bbExportGranules > bbExportGranules is a sub-class of 6 other classes > In the __init__() of bbExportGranules class, I call the __init__() of > 5 of these super-classes. > > > The init of bbExportGranules: > > class bbExportGranules( bbExportMeta, bbExportClusters, > bbExportMaterials, bbExportKinematics, bbExportModels, bbExportMetaToc > ): > > def __init__( self ): > > bbExportMeta.__init__( self ) > bbExportClusters.__init__( self ) > bbExportMaterials.__init__( self ) > bbExportKinematics.__init__( self ) > bbExportModels.__init__( self ) > > > And the bbExportMeta class (the error is raised when bbExportGranules > is subclassing that one): > > class bbExportMeta: > > def __init__( self ): > > self.iPreviousAssetVersion = gec.iNOPREVIOUSASSETVERSION > self.iCurrentAssetVersion = gec.iMINCURRENTASSETVERSION > self.sPreviousAssetProject = xsi.getdefaultproject() > > > > > Any suggestion? I really, really don't see what I'm doing wrong here, > especially that it actually used to work!
Change bbExportGranules to class bbExportGranules( bbExportMeta, bbExportClusters, bbExportMaterials, bbExportKinematics, bbExportModels, bbExportMetaToc ): def __init__(self, bbExportMeta=bbExportMeta): # the only change bbExportMeta.__init__( self ) bbExportClusters.__init__( self ) bbExportMaterials.__init__( self ) bbExportKinematics.__init__( self ) bbExportModels.__init__( self ) If it then starts to work again you are probably rebinding bbExportMeta later in your script, e. g: >>> class A: ... def method(self): pass ... >>> class B(A): ... def method(self): ... A.method(self) ... >>> b = B() >>> b.method() # no error >>> class A: # rebinding A ... def method(self): pass ... >>> b.method() # oops Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 3, in method TypeError: unbound method method() must be called with A instance as first argument (got B instance instead) One way to make that happen is to import the same file twice, once as part of a package and once directly. Solution: never set a path into a package... Peter -- http://mail.python.org/mailman/listinfo/python-list