2017-02-24 1 views
0

Ich habe eine Klasse, die verschiedene Werte (IP-Adresse, Name, Modell usw.) übergibt, wenn ich die Klasse definiere.Aufruf der Klassenfunktion mit einer Liste von Klassenobjekten Python

Gleichzeitig lege ich diese Klassen in eine Liste, so dass ich die Anzahl der Geräte leicht erweitern kann. Ich möchte in der Lage sein, eine separate Funktion von der Klasse aufzurufen.

Zum Beispiel

Meine Klasse sieht ein wenig wie

class foo: 
    def __init__(self, IP, Name, Model, Series): 
     #Do stuff 
    def getstate(): 
     #Do more stuff and return a value 

Meine Liste etwas sieht aus wie

Devices = {} #I fill this up with the list of all devices elseware 
ClassDevices = [] 

for key in Devices: 
     print 'List is empty, store objects' 
     ClassDevices.append(Foo(Devices[key]["IP"], Devices[key], Devices[key]["Model"], Devices[key]["Series"])) 

oben Das scheint zu funktionieren, aber jetzt möchte ich in der Lage sein, den Status zu erhalten von jedem Gerät. Ich habe versucht, die folgenden

print ClassDevices[0].getstate() 

Und ich erhalte eine Fehlermeldung

TypeError: object cannot be interpreted as an index 

ich Python neu bin so bin ich nicht einmal sicher, ob das, was ich versuche möglich zu tun ist

Voll Code (da es wahrscheinlich einfacher ist) kann gesehen werden here

+2

'foo' oder 'foo'? –

+1

Ich glaube nicht, dass Sie das ganze Bild zeigen, etwas fehlt hier. Kannst du den ganzen Code einfügen? – bosnjak

+2

full stacktrace please.' [0] 'kann das nicht tun. –

Antwort

0

Was Sie versuchen zu tun, ist ziemlich einfach. Das Hauptproblem ist, dass Sie nicht korrekt iterieren (weil Sie neu in Python sind).

Sie haben ein Stück Code, der wie folgt aussieht:

for x in SmartHome.SenseMeDevices: 
    print(SmartHome.SenseMeDevices[x].getstate()) 

In diesem Fall x ist bereits ein Element der Liste, kein Index auf ein Element.

Sie sollten stattdessen wie folgt durchlaufen:

for x in SmartHome.SenseMeDevices: 
    print(x.getstate()) 
+0

Das hat perfekt funktioniert! Ich kann nicht glauben, dass es so einfach war, aber ich hätte das nie allein bekommen. – Trogdor

Verwandte Themen