Klasse in einem Paket erweitern
Verfasst: Sonntag 2. Juni 2013, 21:16
Hallo,
ich verwende das Paket 'mutagen' um die ID3-Tags von mp3-Dateien zu bearbeiten.
In meinem Skript verwende ich nur die Module 'mutagen.id3' und 'mutagen.mp3'.
In dem Modul mutagen.id3 muss ich eine Klasse (EncodedTextSpec) ändern, da ich sonst Strings mit einem bestimmten Encoding nicht in den ID3-Tag schreiben kann.
Allerdings möchte ich das nicht direkt in dem Paket ändern, sondern aus meinem Skript heraus. Denn das Ganze soll auch auf anderen PCs laufen, ohne dass dort zuvor eine bleibende Änderung an dem Paket gemacht werden muss.
Dank diesem Forum bin ich auf diesen Beitrag gestoßen, indem ein ähnliches Problem mit einem Monkey Patch gelöst worden ist. Den Lösungsvorschlag habe ich dann auch analog bei mir angewendet:
Ich habe dabei den Code aus der Klasse EncodedTextSpec - die geändert werden soll - kopiert, die Änderungen darin vorgenommen und in die Klasse EncodedTextSpec2 eingefügt.
Die Vererbung stimmt, da dies auch so in der Originalklasse ist.
Leider funktioniert das bei mir aber nicht
Nach der Ausführung taucht noch immer der gleiche Traceback auf, der schon zuvor auf die Zeile verwiesen hat, die den Fehler auslöst. Genau diese Zeile habe ich aber in meiner Klasse geändert.
Es wird also nicht meine neu definierte Klasse verwendet.
Ich weiß jetzt nicht mehr weiter und bin um jede Hilfe von eurer Seite dankbar
Viele Grüße
ich verwende das Paket 'mutagen' um die ID3-Tags von mp3-Dateien zu bearbeiten.
In meinem Skript verwende ich nur die Module 'mutagen.id3' und 'mutagen.mp3'.
In dem Modul mutagen.id3 muss ich eine Klasse (EncodedTextSpec) ändern, da ich sonst Strings mit einem bestimmten Encoding nicht in den ID3-Tag schreiben kann.
Allerdings möchte ich das nicht direkt in dem Paket ändern, sondern aus meinem Skript heraus. Denn das Ganze soll auch auf anderen PCs laufen, ohne dass dort zuvor eine bleibende Änderung an dem Paket gemacht werden muss.
Dank diesem Forum bin ich auf diesen Beitrag gestoßen, indem ein ähnliches Problem mit einem Monkey Patch gelöst worden ist. Den Lösungsvorschlag habe ich dann auch analog bei mir angewendet:
Code: Alles auswählen
import mutagen.id3
class EncodedTextSpec2(mutagen.id3.Spec):
...
mutagen.id3.EncodedTextSpec = EncodedTextSpec2Die Vererbung stimmt, da dies auch so in der Originalklasse ist.
Leider funktioniert das bei mir aber nicht
Nach der Ausführung taucht noch immer der gleiche Traceback auf, der schon zuvor auf die Zeile verwiesen hat, die den Fehler auslöst. Genau diese Zeile habe ich aber in meiner Klasse geändert.
Es wird also nicht meine neu definierte Klasse verwendet.
Ich weiß jetzt nicht mehr weiter und bin um jede Hilfe von eurer Seite dankbar
Viele Grüße