Seite 1 von 1

Customization von 'list'?

Verfasst: Dienstag 24. Juli 2018, 21:48
von miracle173
Ich habe versucht, von der 'list'-Klasse eine leicht veränderte Klasse 'mylist' abzuleiten:

Code: Alles auswählen

class mylist(list):

  def append(self, value):
    print("append "+str(value))
    super().append(value)
und auf dem ersten Blick verhält es sich wie gewollt:

Code: Alles auswählen

heap=mylist()
heap.append(222)
liefert die Ausgabe

Code: Alles auswählen

append 222


In
3.5/Lib/heapq.py findet man den Code

Code: Alles auswählen

def heappush(heap, item):
    """Push item onto heap, maintaining the heap invariant."""
    heap.append(item)
    _siftdown(heap, 0, len(heap)-1)
Der folgende Code liefert keine Ausgabe:

Code: Alles auswählen

import heapq
heap=mylist()
heapq.heappush(heap, 111)


Warum wird nicht

Code: Alles auswählen

append 111
durch das 'heap.append' ausgegeben?

Re: Customization von 'list'?

Verfasst: Dienstag 24. Juli 2018, 22:05
von __blackjack__
Sehr wahrscheinlich wegen dem Code hier: https://github.com/python/cpython/blob/ ... pq.py#L585

Es wird nicht der Python-Code verwendet, sondern eine Implementierung in C die das `append()` nicht verwendet, sondern die interne C-API für `list`-Objekte.