Python TypeError: unsupported operand type(s) for +=: 'int' and 'property'
-
#!/usr/bin/env python class ClassA(object): def __init__(self, a, b, c): self._a=a self._b=b self._c=c @property def calculate(self): return self._a*self._b*self._c class ClassB(object): def __init__ (self): self._list=[] def addInstanceClassA(self, classA=ClassA): self._list.append(classA) @property # EINRUECKUNG ZERSCHOSSEN def calculate(self): temp = 0 for i in self._list: temp+=i.calculate return temp class ClassC(object): def __init__(self): self._tuple = (0,ClassB) # EINRUECKUNG ZERSCHOSSEN self._list=[self._tuple] def addInstanceClassB(self, date = 0, classB=ClassB): self._tuple=(0,classB) self._list.append(self._tuple) @property def calculate(self): temp = 0 for i in self._list: temp+=i[1].calculate return temp ########################### objA=ClassA(3,10,90) objA1=ClassA(3,8,80) print "objA.calculate:", objA.calculate print "objA1.calculate:", objA1.calculate print "##########" objB = ClassB() objB.addInstanceClassA(objA) objB.addInstanceClassA(objA1) print "objB.calculate:", objB.calculate objB1 = ClassB() objB1.addInstanceClassA(objA) objB1.addInstanceClassA(objA1) print "objB1.calculate:", objB1.calculate print "##########" objC = ClassC() objC.addInstanceClassB(objB) objC.addInstanceClassB(objB1) print objC.calculate ##########################
Objekte der ClassA führen eine Berechnung durch.
ClassB hält Objekte der ClassA in einer Liste und summiert die Ergebnisse der Berechnung der einzelnen Objekte der ClassA.
Class C hält eine Liste von Tuples. Das erste Element jeder Tuple ist ein Dummy-Wert, das zweite ein Objekt der ClassB. Nun soll die Summe der Ergebnisse der Berechnungen der ClassB berechnet werden. Und hierbei tritt der Fehler auf:@property def calculate(self): temp = 0 for i in self._list: temp+=i[1].calculate return temp TypeError: unsupported operand type(s) for +=: 'int' and 'property'
Temp ist ein int. Meiner Meinung nach sollte
i[1].calculate
das i-te Element einer Liste aus Tuples sein, wobei an Position [1] der Tuple ein Objekt vom Typ ClassB liegt. ClassB.calculate liefert einen int zurück. Wo ist der Fehler?
PS: "[code]" kommt hier offenbar teilweise nicht mit den Einrückungen klar.
-
Fehler durch copy&past. So muss ClassC aufgerufen werden:
objC = ClassC() objC.addInstanceClassB(0,objB) objC.addInstanceClassB(0,objB1) print objC.calculate
Das ändert aber nichts am Problem.
-
In der __init__ von ClassC steht:
self._list=[self._tuple]
Das ist natürlich Schwachsinn. Folge: es ist an 1. Position der Liste und an 2.Position der Tuple ClassB zu finden. Daher:
self._list=[]
Und das darüber stehende self._tuple = (0,ClassB) ist in dem Beispiel überflüssig.
Danke dennoch!