Abgeleitete Klasse überschreiben

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.
Amerika_befreie_uns
User
Beiträge: 50
Registriert: Sonntag 15. November 2015, 08:28

Samstag 30. November 2019, 17:13

__deets__ hat geschrieben:
Samstag 30. November 2019, 16:45
Erstmal: es gibt keinen Weg, wie du sauber von außen in die Ableitungshierarchie eingreifen kannst. Das ist immer Mist, und die Probleme die durch Code kopieren entstehen, entstehen auch durch monkey patching.
Deswegen frage ich ja, wie ich eine Kopie von dieser Klasse erstellen kann und nur die erste abgeleitete Klasse austauschen kann.


class externe_Klasse_Original(externe_Klasse_a, externe_Klasse_b):

Ich will jetzt eine eigene Klasse als externe_Klasse_Original(meine_a_Klasse, externe_Klasse_b) deklarieren, wie mache ich das?
Benutzeravatar
pillmuncher
User
Beiträge: 1164
Registriert: Samstag 21. März 2009, 22:59
Wohnort: München

Samstag 30. November 2019, 17:49

Um das mal zu paraphrasieren, damit es klar wird:

__deets__ : "Was tu tun willst ist Unsinn."
Amerika_befreie_uns : "Genau! Deswegen will ich es ja so machen!"
In specifications, Murphy's Law supersedes Ohm's.
__deets__
User
Beiträge: 7375
Registriert: Mittwoch 14. Oktober 2015, 14:29

Samstag 30. November 2019, 17:55

Nicht nur Unsinn. Auch unmöglich. Aber dem Herrn Kafka ist jetzt auch genug gehuldigt. EOD.
Amerika_befreie_uns
User
Beiträge: 50
Registriert: Sonntag 15. November 2015, 08:28

Sonntag 1. Dezember 2019, 05:08

Warum sollte es Unsinn sein etwas wieder zu verwenden was es schon gibt.
Du würdest also denn ganzen Quellcode rauskopieren und Kompatibilitäts Probleme in Kauf nehmen?
Sirius3
User
Beiträge: 11317
Registriert: Sonntag 21. Oktober 2012, 17:20

Sonntag 1. Dezember 2019, 07:19

Hier vermuten alle, dass die Lösung, die Du im Kopf hast, nicht ideal ist. Manchmal verrennt man sich in eine Idee und sieht gar nicht mehr, dass man auf einem anderen Weg besser ans Ziel kommt. Hier heißt der bessere Weg Komposition. Um Dir aber konkrete Tipps geben zu können, müssen wir mehr über Dein Problem erfahren.
Benutzeravatar
kbr
User
Beiträge: 1092
Registriert: Mittwoch 15. Oktober 2008, 09:27

Sonntag 1. Dezember 2019, 07:37

So wie Du bisher zu verstehen bist, hast Du das folgende vorliegen: „class C(A, B)“, wobei alle drei Klassen schon Code enthalten, der von Dir weder geschrieben wurde, noch gewartet wird. Jetzt hättest Du gerne „class C(D, B)“, wobei D von Dir kommt. Die Autoren von C haben aber keine Ahnung von diesen Änderungen und D kennen sie schon gar nicht. Selbst wenn Dir dieses monkey patching gelingt, wirst Du Dir ein Minenfeld legen.
Benutzeravatar
snafu
User
Beiträge: 6023
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Sonntag 1. Dezember 2019, 08:12

Gelingen könnte das Monkey-Patching durchaus. Denkbar wäre vorab das Definieren von Funktionen, die "self" und ggf weitere Parameter annehmen. Die Funktionen lassen sich anschließend als Attribute an die Klasse binden und verhalten sich dann wie Methoden. Dass sich der OP damit höchstwahrscheinlich in den Fuß schießt, dürfte aber genau so klar sein. Vielleicht lernt er ja dadurch.
__deets__
User
Beiträge: 7375
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sonntag 1. Dezember 2019, 11:38

Amerika_befreie_uns hat geschrieben:
Sonntag 1. Dezember 2019, 05:08
Warum sollte es Unsinn sein etwas wieder zu verwenden was es schon gibt.
Du würdest also denn ganzen Quellcode rauskopieren und Kompatibilitäts Probleme in Kauf nehmen?
Ich würde weder Quellcode kopieren NOCH von außen in den Innereien einer Bibliothek rumfuhrwerken und mir dabei einreden, ich wäre irgendwie robuster unterwegs. Ein solcher Fall tritt insbesondere in einer Sprache die auf Ducktyping beruht eigentlich gar nicht auf. Warum du glaubst das machen zu müssen, hast du noch nicht dargelegt.
Amerika_befreie_uns
User
Beiträge: 50
Registriert: Sonntag 15. November 2015, 08:28

Sonntag 1. Dezember 2019, 22:30

Ich brauche diese Klasse/Funktion
3.7/lib/python3.7/importlib/_bootstrap_external.py:
class SourceFileLoader(FileLoader, SourceLoader):
Allerdings brauche ich FileLoader als Abgewandelte Form:
Statt
def get_data(self, path):
"""Return the data from path as raw bytes."""
with _io.FileIO(path, 'r') as file:
return file.read()
brauche ich
def get_data(self, path):
"""Return the data from path as raw bytes."""
return "Mein Quellcode als Zeichenkette"
Ich habe es im Moment so gelöst, dass das ich den Quellcode von SourcecodeLoader kopiere und FileLoader mit meiner eigener Klasse ersetzen. Allerdings bin ich nicht damit glücklich.
__deets__
User
Beiträge: 7375
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sonntag 1. Dezember 2019, 22:55

Und wieso kannst du nicht einfach SourceFileLoader ableiten & eine Überladung von der Methode machen?

Und wozu machst du das? Es gibt einen offiziellen Weg sowas zu tun - https://docs.python.org/3/library/impor ... n-importer - warum kannst du den nicht beschreiten?
Amerika_befreie_uns
User
Beiträge: 50
Registriert: Sonntag 15. November 2015, 08:28

Montag 2. Dezember 2019, 00:13

__deets__ hat geschrieben:
Sonntag 1. Dezember 2019, 22:55
Und wieso kannst du nicht einfach SourceFileLoader ableiten & eine Überladung von der Methode machen?

Und wozu machst du das? Es gibt einen offiziellen Weg sowas zu tun - https://docs.python.org/3/library/impor ... n-importer - warum kannst du den nicht beschreiten?
Sie gut aus, wie verwendet man das? Kann ich damit ein Modul aus einer Zeichenkette laden?
__deets__
User
Beiträge: 7375
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 2. Dezember 2019, 08:13

Ja, nach nur wenigen Sekunden googeln findet man zb https://stackoverflow.com/questions/141 ... rom-memory
Amerika_befreie_uns
User
Beiträge: 50
Registriert: Sonntag 15. November 2015, 08:28

Montag 2. Dezember 2019, 16:23

__deets__ hat geschrieben:
Montag 2. Dezember 2019, 08:13
Ja, nach nur wenigen Sekunden googeln findet man zb https://stackoverflow.com/questions/141 ... rom-memory
Funktioniert nicht.
Amerika_befreie_uns
User
Beiträge: 50
Registriert: Sonntag 15. November 2015, 08:28

Montag 2. Dezember 2019, 16:28

für Python3
Benutzeravatar
pillmuncher
User
Beiträge: 1164
Registriert: Samstag 21. März 2009, 22:59
Wohnort: München

Montag 2. Dezember 2019, 17:03

Amerika_befreie_uns: Nach 50 posts hier im Forum sollte dir inzwischen klar sein, dass die Aussage "funktioniert nicht" in keiner Weise dazu beiträgt, dass dir jemand helfen kann. Was heißt "funktioniert nicht"? Ist dein Rechner abgestürtzt? Hat er angefangen zu brennen? Oder hat er Beleidigungen gegen dich ausgestoßen?
In specifications, Murphy's Law supersedes Ohm's.
Antworten