Python中的vtk用户类

4 投票
1 回答
739 浏览
提问于 2025-04-17 13:23

我想在Python中扩展vtkActor,加上我自己的东西。可是我找不到调用基类的__init__方法的办法,感觉好像没有这个__init__。也许是因为vtk/Python的封装不允许用户这样自定义,所以super调用失败,提示vtkActor不是一个类型……嗯……

我该怎么做类似下面这样的事情:

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

?

1 个回答

3

Python对VTK类的封装有点不同。我们来看看这个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

你也会得到一个vtk对象:

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

如果你需要一个实际的示例,可以看看这个类。它是我PyLocator程序的一部分。每个标记(截图中的蓝色/绿色小球)就是这样的一个对象。

撰写回答