Skip to content

VTK Python override breaks with certain shared base classes

The new override mechanism in VTK's Python wrapping fails when the wrapped class has certain other base classes like collections.abc.MutableSequence or dict

from collections.abc import MutableSequence
from vtkmodules.vtkCommonDataModel import vtkMultiBlockDataSet

@vtkMultiBlockDataSet.override
class MultiBlock(MutableSequence, vtkMultiBlockDataSet):
    pass

yields the error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[7], line 4
      1 from collections.abc import MutableSequence
      2 from vtkmodules.vtkCommonDataModel import vtkMultiBlockDataSet
----> 4 @vtkMultiBlockDataSet.override
      5 class MultiBlock(MutableSequence, vtkMultiBlockDataSet):
      6     pass

TypeError: method requires a type object or None.

and

from vtkmodules.vtkCommonDataModel import vtkMultiBlockDataSet

@vtkMultiBlockDataSet.override
class MultiBlock(dict, vtkMultiBlockDataSet):
    pass

yields the error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[9], line 4
      1 from vtkmodules.vtkCommonDataModel import vtkMultiBlockDataSet
      3 @vtkMultiBlockDataSet.override
----> 4 class MultiBlock(dict, vtkMultiBlockDataSet):
      5     pass

TypeError: multiple bases have instance lay-out conflict