@fonzy: Worauf willst Du mit "iterable Klasse" hinaus? Um dieses Problem zu lösen, brauchst Du keine eigene Klasse, und erst recht keine, die einen iterierbaren Datentyp definiert.
Deine Idee, einfach von "int" abzuleiten, und die Operatoren zu überladen, funktioniert ohnehin nicht, da +=, -= und Konsorten den Namen auf der linken Seite immer im aktuellen Namensraum neu binden, unabhängig davon, ob der Typ des rechten Operanden den Operator überlädt oder nicht:
Code: Alles auswählen
In [1]: class Foo(object):
...: def __iadd__(self, value):
...: print(value)
...: return self
...:
In [2]: f = Foo()
In [3]: f += 10
10
In [4]: def foo():
...: f += 10
...:
In [5]: foo()
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
/home/swiesner/<ipython-input-5-624891b0d01a> in <module>()
----> 1 foo()
/home/swiesner/<ipython-input-4-5ab5d0e3f155> in foo()
1 def foo():
----> 2 f += 10
3
UnboundLocalError: local variable 'f' referenced before assignment
Anders darf sich Python an dieser Stelle gar nicht verhalten, da eine "__iadd__()"-Implementierung prinzipiell beliebige Objekte zurückgeben kann, so dass der Name zwangsläufig neu gebunden werden muss, um eine korrekte Semantik zu erhalten.