Python中的vtk用户类
我想在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程序的一部分。每个标记(截图中的蓝色/绿色小球)就是这样的一个对象。