2017-06-22 8 views
0

私はクラスという名前のクラスを持っています。これは、クラスSegmentPointmassのインスタンスの数を作成します。これらのすべてのインスタンスには変数massがあります。どのようにして同じ変数名massを持つオブジェクト内のすべてのオブジェクトの総質量を得ることができますか?私は今何同じ名前のクラス内のインスタンスのすべての変数を追加します

self.totalmass = self.joint1.mass + self.joint2.mass + self.joint3.mass + self.slide.mass + self.arm.mass 

は非常に長いラインで、Robotはそれ以上のアームや関節を獲得したときに、本当に不便です

class Robot: 
    def __init__(self, massJoint1, massJoint2, massJoint3, massSlide, reachSlide, massArm, lengthArm): 
     self.joint1 = Pointmass(massJoint1) 
     self.joint2 = Pointmass(massJoint2) 
     self.joint3 = Pointmass(massJoint3) 

     self.slide = Slide(massSlide, reachSlide) 
     self.arm = Arm(massArm, lengthArm) 

     self.totalmass = self.joint1.mass + self.joint2.mass + self.joint3.mass + self.slide.mass + self.arm.mass 

    def printVars(self): 
     attrs = vars(self) 
     print(', \n'.join("%s: \t%s" % item for item in attrs.items())) 
     print() 


class Pointmass: 
    def __init__(self, mass): 
     self.mass = mass 

     self.location = None 


class Segment: 
    def __init__(self, mass): 
     self.mass = mass 

     self.start = None 
     self.end = None 

れて...です総質量を得る良い方法がありますか?

+1

リスト、 'for'ループと' * args'を使用しますか? –

+2

あなたの 'joint1'、' joint2'、 'joint3'のようなものがリストにあるはずです。 – khelwood

+4

あなたのロボットの足の数が多すぎる場合は、それをリストに保存する必要があります。 –

答えて

2

関節を別の属性に保存しないでください。むしろ、単純なjointsリストを格納してください。 sumをジェネレータ式で単純に使うことができます。

self.totalmass = sum(j.mass for j in self.joints) 
+0

その場合、どのジョイントがリストのどのインデックスにあるのかを覚えておく必要がありますか?私はむしろそれらに一意の名前をつけたいと思います。例では 'jointx'を使用してはいけません... –

+1

その場合、dictを使用して' self.joints.values() 'を繰り返します。または、必要ならばそれらを別々の属性として保持しますが、 '[self.joint1、self.joint2] 'などで繰り返します。 –

関連する問題