Seite 1 von 1

klasse um Methode erweitern

Verfasst: Dienstag 26. April 2011, 15:34
von hypnoticum
Wenn ich einer bestehenden Klasse eine Methode hinzufügen möchte, wie stelle ich das an?
Konkret will ich aus einem Dictionary alle Elemente entfernen die nicht von einem bestimmten Typ (hier: wieder dict) sind.
das ganze wird häufiger benötigt und deshalb wäre ein 'Makro' hilfreich bzw. eben die Erweiterung der bestehenden Klasse dict.

Code: Alles auswählen

def exDicts(d):
    for key in d.keys():
            if not isinstance(d[key], dict):
                del d[key]

Re: klasse um Methode erweitern

Verfasst: Dienstag 26. April 2011, 15:38
von Hyperion
Stichwort Vererbung. In diesem Falle solltest Du Dir mal das Modul UserDict angucken.

Re: klasse um Methode erweitern

Verfasst: Dienstag 26. April 2011, 15:42
von hypnoticum
bei Vererbung müsste ich ja aber erst eine Klasse neu anlegen, oder?

Re: klasse um Methode erweitern

Verfasst: Dienstag 26. April 2011, 15:45
von Hyperion
hypnoticum hat geschrieben:bei Vererbung müsste ich ja aber erst eine Klasse neu anlegen, oder?
Ja klar. Zumindest in Python; andere Sprachen erlauben die Erweiterung von Klassen auch zur Laufzeit, etwa JavaScript oder Ruby. Wobei auch bei diesen bereits bestehende Objekte die hinzugefügten Methoden nicht besitzen (iirc).

Wir hatten da neulich mal einen Thread zu dieser Thematik iirc, wie man das in Python ebenfalls hinbekommen kann.

Re: klasse um Methode erweitern

Verfasst: Dienstag 26. April 2011, 15:48
von hypnoticum
ok, danke dann überleg ich mir was anders ...

Re: klasse um Methode erweitern

Verfasst: Dienstag 26. April 2011, 15:50
von Hyperion
Ha, da isser :-)

Was genau willst Du denn machen? Evtl. gibt es eine gute Alternative oder aber durch das spezielle Gesamtproblem würde sich eine eigene spezialisierte Klasse eh eignen. Wenn Du uns ein wenig mehr Infos gibst, kann man da sicherlich präzisere Tipps geben :-)

Re: klasse um Methode erweitern

Verfasst: Dienstag 26. April 2011, 15:50
von derdon
Seit 2.6 gibt es im Modul collections ABCs: http://docs.python.org/library/collecti ... se-classes. Daher rate ich dazu, diese zu vrwenden statt UserDict. Die doku sagt auch:
Starting with Python version 2.6, it is recommended to use collections.MutableMapping instead of DictMixin

Re: klasse um Methode erweitern

Verfasst: Dienstag 26. April 2011, 15:57
von hypnoticum
muss weg melde mich morgen wieder ...

Re: klasse um Methode erweitern

Verfasst: Dienstag 26. April 2011, 16:47
von BlackJack
@hypnoticum: Tut es nicht auch eine Funktion wie im ersten Beitrag? Ob man die nun so aufruft oder als Methode aufrufen würde, macht ja keinen grossen Unterschied, oder?

Re: klasse um Methode erweitern

Verfasst: Mittwoch 27. April 2011, 07:46
von hypnoticum
@BlackJack
ja, mit einer Funktion habe ich es jetzt gemacht. Ich war mir nur nicht sicher, ob es ohne größeren Aufwand machbar gewesen wäre die Klasse dict zu erweitern. War mein erster Gedanke, aber so ist es auch OK.