我目前正在尝试创建一个类,其唯一目的是快速创建一个VPython对象并向该对象追加附加值。VPython会自动创建一个具有位置和尺寸等值的对象。不过,我还想增加一些变量,比如材料的物理性质和动量。所以我的解决方案是:

class Bsphere(physicsobject):

     def build(self):

         sphere(pos=ObjPosition, radius=Rad,color=color.red)

physicsobject看起来像这样:
class physicsobject:

    def __init__(self):

         self.momentum=Momentum

实际上,我希望在添加新变量时仍保留VPython sphere()对象的原始属性。这实际上在最初是可行的,对象呈现并添加变量。但现在,我无法更改VPython对象。如果我键入:
Sphereobj.pos=(1,2,3)

位置将作为变量更新,但是VPython不会更新渲染对象。现在,对象和渲染对象之间存在断开连接。在创建新对象时,是否有方法继承VPython对象的呈现方面?我不能简单地使用
class Bsphere(sphere(pos=ObjPosition, radius=Rad,color=color.red)):

     self.momentum=Momentum

关于VPython的文档也不多。

最佳答案

我不用VPython。但是,从外观上看,您继承的是physicsobject的属性,而不是sphere。我的建议是试试这个:

# Inherit from sphere instead
class Bsphere(sphere):
     # If you want to inherit init, don't overwrite init here
     # Hence, you can create by using
     # Bpshere(pos=ObjPosition, radius=Rad,color=color.red)
     def build(self, material, momentum):
         self.momentum = momentum
         self.material = material

然后您可以使用:
 myobj = Bsphere(pos=(0,0,0), radius=Rad,color=color.red)
 myobj.pos(1,2,3)

但是,我建议您在子类中使用overwrite方法,前提是您知道要在原始__init__构造中声明的所有参数。

关于python - VPython继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15940665/

10-09 22:43