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

我该怎么做:

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

?

最佳答案

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

In [1]: import vtk

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

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

基本上,您仍然可以从 vtkActor 继承,但是您不能依赖 Python 中使用的对象初始化。您仍然可以使用 self 作为第一个参数显式调用这个父类(super class)的“普通”方法。

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

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

你还会得到一个 vtkobject:
In [8]: type(MyActor())
Out[9]: vtkobject

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

10-08 04:08