我想从 FreeCAD python 类 Vector 继承。
在下面的测试代码中,我要么使用自己的 Vector 类,要么从 FreeCAD 导入 Vector 类。它适用于我自己的 Vector 类,但打印一个零向量,然后崩溃 - 'Base.Vector' 没有属性 'extra',这意味着 ExtraVector 的构造函数已被绕过,ExtraVector 只是一个向量,当使用FreeCAD 矢量。
(我怀疑 FreeCAD 向量是 C 代码的包装器)
FreeCAD 做了什么?你如何弄乱一个python类来赋予它这种行为?
我该如何解决?继承是解决我问题的最佳方法。组合意味着编写更多代码,我不喜欢 WET。
# ---------------------------------------------------
# Vector is either defined in this file or imported
# (comment out to swap over)
#from FreeCAD import Vector # Probably a wrapper around C code
class Vector :
def __init__ ( self, x, y, z ) :
self.x = x
self.y = y
self.z = z
# ---------------------------------------------------
class ExtraVector ( Vector ) :
def __init__ ( self, x, y, z, extra ) :
super().__init__ ( x, y, z )
self.extra = extra
def Test ( ) :
evect = ExtraVector ( 1, 2, 3, 4 )
print ( "x = ", evect.x, " y = ", evect.y, " z = ", evect.z )
print ( "e = ", evect.extra )
Test()
当使用我的 Vector 类(FreeCAD Vector 已注释掉)时,输出为:-
x = 1 y = 2 z = 3
e = 4
使用 FreeCAD Vector 时(我的 Vector 已注释掉),输出为:-
x = 0.0 y = 0.0 z = 0.0
Traceback (most recent call last):
File "ExtraVector.py", line 28, in <module>
Test()
File "ExtraVector.py", line 26, in Test
print ( "e = ", evect.extra )
<class 'AttributeError'>: 'Base.Vector' object has no attribute 'extra'