Ich habe diese Klasse gemacht:Wie erzwinge ich eine Klasse?
class AudioSegmentCustom(AudioSegment):
def fade_override(self, seg, fade_len=100):
seg1, seg2 = AudioSegment._sync(self, seg)
final = seg1[:-fade_len]
a_fin = seg1[-fade_len:].fade(to_gain=-120, start=0, end=float('inf'))
a_fin *= seg2[:fade_len]
return (final + a_fin) + seg2[fade_len:]
Das Problem, das ich mit Blick auf bin, wenn ich einige AudioSegmentCustom
Variablen zu erstellen, wenn ich „add“ sie, die add
Operation liefert seinen ursprünglichen Typ parent = AudioSegment
So der folgende Code nicht funktioniert:
final = AudioSegmentCustom.from_mp3(mp3_src) + AudioSegment.from_mp3(mp3_other)
final = final.fade_override(...blabla...)
weil ich:
'AudioSegment' object has no attribute 'fade_override'
... obwohl ich mit einem AudioSegmentCustom
Objekt begonnen habe, beende ich mit AudioSegment
"nur" Objekt. Wie wird der Typ eines neu erstellten Objekts "erzwungen"?
Für den Fall, müssen Sie es:
class AudioSegment(object):
def __add__(self, arg):
if isinstance(arg, AudioSegment):
return self.append(arg, crossfade=0)
else:
return self.apply_gain(arg)
Sie sollten wahrscheinlich den Code für 'AudioSegment .__ add__' hinzufügen. –
Es gibt nur ein AudioSegment-Objekt zurück. Warum brauchen Sie es? Anyway nur aktualisiert meine Frage –
Da wäre ein Weg, es zu zwicken, so dass es Instanzen der gleichen Klasse wie 'self' erstellt. Wenn Sie es nicht ändern wollen, müssen Sie sicherlich eine separate 'AudioSegmentCustom .__ add__' Methode schreiben oder das' AudioSegmentCustom' an anderer Stelle erstellen. –