我想用我自己的 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 程序的一部分。每个标记(屏幕截图上的蓝/绿球)都是这样一个对象。