Customization von 'list'?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
miracle173
User
Beiträge: 127
Registriert: Samstag 6. Februar 2016, 00:28

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?
Benutzeravatar
__blackjack__
User
Beiträge: 13115
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten