2016-10-30 1 views
-1

Ich versuche, meine eigene Nbody-Simulation von Grund auf neu zu erstellen. Ich habe eine Klasse (Körper genannt) erstellt, die Funktionen enthält, um die Kräfte der anderen Körper zu berechnen und entsprechend zu verschieben. Ich habe eine andere Klasse namens System erstellt, die die Anzahl der Körper definiert, die Aktualisierungen der Positionen steuert und ein Diagramm des Systems aktualisiert. Beide Klassen arbeiten gut, wenn ich die Anzahl der Variablen individuell wie folgt definieren:Liste mit Variablen erstellen, die Klassen enthalten

d1 = Body(i) 
d2 = Body(i) 
.... 

und steckte sie in eine Liste list = [d1,d2, ...]. i ist eine Zeichenkette (ein Name, die Das Problem bei diesem Verfahren verwendet wird, ist, dass es ermüdend ist n einzelne Variablen-Definitionen zu tun und sie dann in einer Liste gesetzt Ich habe versucht, eine Schleife zu tun.

self.liste = [] 
for i in range(n): 
      self.liste.append(Body(str(i))) 

aber das gibt eine Liste zurück, die Nonetypes enthält(). Es ist wichtig für meine Einrichtung, dass ich mit einer Liste n verschiedenen Klassen (es ist okay, wenn sie durch einen Variablennamen definiert sind) enden. Kann mir jemand dabei helfen?

+0

das funktioniert für mich. – Daniel

+0

Versuchen Sie, nach jedem Schritt Druckanweisungen hinzuzufügen. Entspricht der zurückgegebene (Er..Printed) Wert dem, was Sie erwartet haben? –

+0

was meinst du "das gibt eine Liste mit Nonetypes zurück" wo gibst du etwas zurück? meinst du, dass "self.liste" letztendlich eine Liste von 'None' Werten ist, wo genau die Liste von' None' herkommt? –

Antwort

0

Folgendes funktioniert für mich:

class Body: 
    bodies = [] 
    def __init__(self, n): 
     self.n = n 

    def __str__(self): 
     return str(self.n) 

for i in range(5): 
    Body.bodies.append(Body(i)) 

for body in Body.bodies: 
    print body 
    # This also works. 
    print body.n 

Hinweis: Wenn Sie eine Klasse direkt testen und drucken, benötigen Sie eine __str__ (oder __repr__) Methode.

+1

'' '__str ___' '' und/oder '' __repr__'''. – wwii

Verwandte Themen