'instancemethod' - Objekt hat kein Attribut '__getitem__' mit der class-Variablen
Ich versuche zu schaffen, eine python-Klasse zur Steuerung von Schrittmotoren mit meinem Raspberry Pi. Es funktioniert auch meistens, aber ich erhalte immer ein "'instancemethod' - Objekt hat kein Attribut '__getitem__'
Fehlermeldung, wenn ich eine Liste definiert, wie eine Klasse variable. Die Fehlermeldung listet dieses Stück code als der Schuldige, aber ich kann nicht sehen, nichts falsch mit ihm, wenn seq[self.StepCounter][pin]!=0:. Es wird funktionieren, wenn ich es definieren als eine Instanz-variable oder eine Globale variable, obwohl.
Das ist mein code:
import RPi.GPIO as GPIO
import time
debug = True
class stepper:
clockwise = []
clockwise = range(0,4)
clockwise[0] = [1,0,0,0]
clockwise[1] = [0,1,0,0]
clockwise[2] = [0,0,1,0]
clockwise[3] = [0,0,0,1]
def __init__(self,pin1,pin2,pin3,pin4):
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
self.pin1 = pin1
self.pin2 = pin2
self.pin3 = pin3
self.pin4 = pin4
self.StepCounter = 0
self.pinarray = [pin1,pin2,pin3,pin4]
for pin in self.pinarray:
if debug == True:
print "Setup pin " + str(pin)
GPIO.setup(pin,GPIO.OUT)
GPIO.output(pin, False)
self.stepNum = 512.0
self.coilNum = 4.0
def setup(self,stepNum,coilNum):
self.stepNum = float(stepNum)
self.coilNum = float(coilNum)
self.partNum = self.coilNum * self.stepNum
def clockwise(self,speed):
seq = stepper.clockwise
self.WaitTime = (1.0 / (self.stepNum * self.coilNum)) * speed
for pin in range(0, 4):
xpin = self.pinarray[pin]
if seq[self.StepCounter][pin]!=0:
GPIO.output(xpin, True)
else:
GPIO.output(xpin, False)
self.StepCounter += 1
if (self.StepCounter==len(seq)):
self.StepCounter = 0
if (self.StepCounter<0):
self.StepCounter = len(seq)
time.sleep(self.WaitTime)
print "Adding Motor Instance"
motor = stepper(24,25,8,7)
print "Spinning Motor"
while "True":
motor.clockwise(5)
Könnte bitte jemand mir sagen, was ist falsch mit ihm und erklären Sie, warum. Dank
können Sie uns die genaue vollständige Fehlermeldung?
und initialisieren Sie bitte im Uhrzeigersinn :
clockwise = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]
statt Ihrem Chaos! 😉Sie haben zwei Attribute namens
clockwise
eine Liste und eine Methode.
InformationsquelleAutor SquarePie | 2014-01-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du nicht posten den vollständigen traceback, aber ich kann eine Vermutung:
Legen Sie
seq
gleich die Methodestepper.clockwise
auf die erste Zeile. Dann ein paar Zeilen später werden Sie versuchen, einen index in:seq[self.StepCounter]
. Aber was bedeutet es, um dieself.StepCounter
-te element einer Methode?Nichts, denn:
Sollten Sie nicht verwenden
clockwise
sowohl als name einer Liste, und wie der name der Methode; nur die zuletzt ausgeführte definition halten, so dass durch die Zeit, die Sie bekommen, umseq = stepper.clockwise
, es ist die Methode, nicht die Liste.clockwise = range(0,4)
machtclockwise=[]
unnötig, brauchen Sie nicht zu "erklären" im Uhrzeigersinn vor dem zuweisen einer Liste an. Eine einzelneclockwise = [ [1,0,0,0], [0,1,0,0], [0,0,1,0], [0,0,0,1] ]
genügt.InformationsquelleAutor DSM