2013-04-11 68 views
3

我正在尝试创建一个类,以便快速创建VPython对象并将附加值附加到对象。 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领域的原始性()对象,同时增加新的变数。这实际上起作用,对象呈现和变量被添加。但是现在,我无法改变VPython对象。如果我输入:

Sphereobj.pos=(1,2,3) 

该位置将更新为变量,但是,VPython不会更新呈现的对象。现在对象和渲染对象之间存在断开。有什么方法可以在创建新对象时继承VPython对象的渲染方面?我不能简单地用

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

    self.momentum=Momentum 

并没有对VPython多文档。

回答

1

我不使用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__方法在你的子类,提供你知道所有的参数在原sphere构建申报。

+0

谢谢,现在似乎工作。 – user1453064 2013-04-12 03:57:52

+1

我建议你阅读继承的[learnpythonthehardway](http://learnpythonthehardway.org/book/ex44.html)的教程,特别是覆写。这些概念对理解非常重要,并且可以帮助您在以后避免错误。 – nqngo 2013-04-12 13:22:47

0
from visual import * 
class Physikobject(sphere): 
    def __init__(self): 
     sphere.__init__(self, pos = (0,0,0), color=(1,1,1)) 
     self.otherProperties = 0 

我认为这一个有帮助 - 问题可能是老的人们可能仍然会考虑它。

0

我是一个很大的vpython用户,我从来没有使用过这样的东西,但我知道vpython已经有了你试图实现的功能。
===============================示例================ ====================

from visual import * 
myball = sphere() 
myball.weight = 50 
print (myball.weight) 

此代码创建一个球然后初始化一个称为加权变量然后显示它。

0

关于VPython的美妙之处在于您不需要那样做。

VPython为您做到了!

这是所有你需要做的:

variable_name = sphere()#you can add pos and radius and other things to this if you want 
variable_name.momentum = something 

您可以轻松地插入到这个函数:

objectstuffs = [] 
def create_object(pos,radius,color,momentum): 
    global objectstuffs 
    objectstuffs.append(sphere(pos=pos,radius=radius,color=color)) 
    objectstuffs[len(objectstuffs)-1].momentum = momentum 

该函数绝对不是在所有情况下使用的最好的事情,但您可以轻松编辑该功能,这仅仅是为了举例。

与VPython玩得开心!