3

現在、VPython オブジェクトをすばやく作成し、オブジェクトに追加の値を追加するという唯一の目的でクラスを作成しようとしています。VPython は、位置や寸法などの値を持つオブジェクトを自動的に作成します。ただし、材料の物理的特性や運動量などの変数も追加したいと考えています。だからここに私の解決策があります:

class Bsphere(physicsobject):

     def build(self):

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

次のような物理オブジェクトを使用します。

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 に関するドキュメントはあまりありません。

4

4 に答える 4

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

于 2013-04-11T06:29:13.680 に答える