4

我想用我自己在 Python 中的东西来扩展vtkActor 。我找不到调用基类的方法__init__,看起来没有__init__。也许vtk/Python 包装不允许这样的用户专业化,super失败的说法vtkActor不是类型............

我该怎么做:

class MyVtkActor(vtk.vtkActor):
  def __init__(self,*args):
    vtk.vtkActor.__init__(self,*args)
    # my stuff here

?

4

1 回答 1

3

VTK 类的 Python 包装器有些不同。看看这个 ipython 会话:

In [1]: import vtk

In [2]: type(vtk.vtkActor)
Out[2]: <type 'vtkclass'>

In [3]: type(vtk.vtkActor())
Out[3]: vtkobject

基本上,您仍然可以从 vtkActor 继承,但不能依赖 Python 中使用的对象初始化。您仍然可以显式调用此超类的“普通”方法,并将其self作为第一个参数。

您必须手动设置调用构造函数(在 C 中的意思)会执行的所有属性。

请记住:对象构造是在初始化之前执行的,因此如果您从 vtkActor 继承,则会调用普通的 vtkActor 构造函数。所以通过定义

class MyActor(vtk.vtkActor):
    pass

你还会得到一个 vtkobject:

In [8]: type(MyActor())
Out[9]: vtkobject

如果你需要一个真实的样本,你可以看看这个类。它是我的PyLocator程序的一部分。每个标记(屏幕截图上的蓝/绿球)都是这样一个对象。

于 2013-01-23T08:54:50.083 回答