2

我想从 FreeCAD python 类 Vector 继承。

在下面的测试代码中,我要么使用自己的 Vector 类,要么从 FreeCAD 导入 Vector 类。它适用于我自己的 Vector 类,但打印一个零向量,然后崩溃 - 'Base.Vector' 没有属性 'extra',这意味着 ExtraVector 的构造函数已被绕过,ExtraVector 只是一个向量,当使用FreeCAD 矢量。

(我怀疑 FreeCAD 向量是 C 代码的包装器)

  1. FreeCAD 做了什么?你如何弄乱一个python类来赋予它这种行为?

  2. 我该如何解决?继承是解决我问题的最佳方法。组合意味着编写更多代码,我不喜欢 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'

4

0 回答 0