Hi, ich möchte eine Klasse von list erben lassen
und ihr verhalten so modifizieren, dass immer wenn
ein item angefügt oder entfernt wird, registriert wird,
welche teile der liste gleich geblieben sind/sich geändert haben.
bei append, extend, pop, insert, __setitem__, __getitem__ , ...
geht das ja auch ohne probleme, aber wie kann man das verhalten der liste
im bezug auf ( somelist += [item1, item2 ... ] ) verändern ?
wird durch einen operator auch eine methode der instance aufgerufen ?
das Verhalten einer Liste im Bezug auf + modifizieren
steht zwar nicht in der doku, aber die doku hat insofern schon geholfen, dass sie
vergleichs-operatoren anspricht.
hab die function gefunden, die bei + aufgerufen wird.
allerdings verhält sie sich ein wenig seltsam,
( oder mach ich irgendwas falsch ?
Hat da jemand ne ahnung was ich falsch mache ?
edit:
habs rausgefunden, list.__iadd__ (self, some_list) wird an irgendeine andere funktion weitergegeben, und muss deswegen zurückgegeben werden
thx for the help nuss
vergleichs-operatoren anspricht.
hab die function gefunden, die bei + aufgerufen wird.
allerdings verhält sie sich ein wenig seltsam,
( oder mach ich irgendwas falsch ?
Code: Alles auswählen
In [1]: class TestList(list):
...: def __iadd__(self, some_list):
...: print('kk')
...: list.__iadd__(self, some_list)
...:
In [2]: tl = TestList([1,2,3,4])
In [3]: tl
Out[3]: [1, 2, 3, 4]
In [4]: tl += [5, 6, 7]
kk
In [5]: tl
In [6]: type(tl)
Out[6]: <type 'NoneType'>
In [7]: class Tlist(list):
...: def __iadd__(self, some_list):
...: print type(some_list)
...:
In [9]: tl = Tlist()
In [10]: tl += [1,2,3,4]
<type 'list'>
In [14]: class Tlist(list):
....: def __iadd__(self, *args, **kwargs):
....: print(args)
....: print(kwargs)
....: list.__iadd__(self, *args, **kwargs)
....:
In [15]: tl = Tlist([1,2,3,4])
In [16]: tl
Out[16]: [1, 2, 3, 4]
In [17]: tl += [5, 6, 7, 8]
([5, 6, 7, 8],)
{}
edit:
habs rausgefunden, list.__iadd__ (self, some_list) wird an irgendeine andere funktion weitergegeben, und muss deswegen zurückgegeben werden
thx for the help nuss