Hallo,
ich erhalte von einer externen Methode ein eine Liste von Objekten zurück. Wie kann ich die zurückgegebenen Objekte als ein Object einer abgeleiteten Klasse erstellen lassen?
mfg
Twilo
Objekt als anderes Objekt erstellen
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Hallo,
wie meinst du das mit dem Konvertieren?
Den ursprünglichen Code kann ich nicht anpassen, da der ursprüngliche Code in Java geschrieben ist.
Meine Klasse leite ich von einer Java-Klasse ab.
mfg
Twilo
wie meinst du das mit dem Konvertieren?
Den ursprünglichen Code kann ich nicht anpassen, da der ursprüngliche Code in Java geschrieben ist.
Meine Klasse leite ich von einer Java-Klasse ab.
mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Naja, angenommen du bekommst von der Klasse eine Liste, dann kannst du mit ``tuple(deine_liste)`` das Objekt in ein Tupel konvertieren... du müsstest halt mit ein paar Details mehr rausrücken, damit man dir spezifischere Sachen sagen kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hallo,
ich erhalte eine Liste mit Objekten zurück
array(com.collabnet.ce.soap50.webservices.tracker.ArtifactSoapRow, [com.collabnet.ce.soap50.webservices.tracker.ArtifactSoapRow@18806f7, com.collabnet.ce.soap50.webservices.tracker.ArtifactSoapRow@1bd8993, com.collabnet.ce.soap50.webservices.tracker.ArtifactSoapRow@1dbac11])
class MeineKlasse(ArtifactSoapRow):
pass
wie kann ich aus der obigen Liste, z.B. folgende machen
[<__main__.MeineKlasse instance at 0x1013fc8>, <__main__.MeineKlasse instance at 0x1038638>, <__main__.MeineKlasse instance at 0x1038998>]
mfg
Twilo
ich erhalte eine Liste mit Objekten zurück
array(com.collabnet.ce.soap50.webservices.tracker.ArtifactSoapRow, [com.collabnet.ce.soap50.webservices.tracker.ArtifactSoapRow@18806f7, com.collabnet.ce.soap50.webservices.tracker.ArtifactSoapRow@1bd8993, com.collabnet.ce.soap50.webservices.tracker.ArtifactSoapRow@1dbac11])
class MeineKlasse(ArtifactSoapRow):
pass
wie kann ich aus der obigen Liste, z.B. folgende machen
[<__main__.MeineKlasse instance at 0x1013fc8>, <__main__.MeineKlasse instance at 0x1038638>, <__main__.MeineKlasse instance at 0x1038998>]
mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
@Twilo: Warum willst Du das machen? Wenn da nur ``pass`` drinsteht, ist das doch relativ witzlos!?
Könntest Du nicht einfach eine Wrapper-Klasse schreiben, die an die Objekte von Java weiterdelegiert?
Könntest Du nicht einfach eine Wrapper-Klasse schreiben, die an die Objekte von Java weiterdelegiert?
Hallo,

Könntest Du nicht einfach eine Wrapper-Klasse schreiben, die an die Objekte von Java weiterdelegiert?[/quote]
wie meinst du das?
mfg
Twilo
das war jetzt nur ein sehr kurzes BeispielBlackJack hat geschrieben:@Twilo: Warum willst Du das machen? Wenn da nur ``pass`` drinsteht, ist das doch relativ witzlos!?

Könntest Du nicht einfach eine Wrapper-Klasse schreiben, die an die Objekte von Java weiterdelegiert?[/quote]
wie meinst du das?
mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Ganz einfach als Beispiel:
Du hast deine Java-Klasse A mit zwei Methoden method1, method2.
Denke mal mit diesem Beispiel ist das einigermaßen nachvollziehbar.
Du hast deine Java-Klasse A mit zwei Methoden method1, method2.
Code: Alles auswählen
class AWrapper(object):
def __init__(self, wrapped_class):
self.wrapped_class = wrapped_class
def method1(self):
return self.wrapped_class.method1()
def method2(self):
return self.wrapped_class.method2()
Hallo,
ich hatte eher an so etwas gedacht:
Object A ist jetzt vom Typ X
mfg
Twilo
ich hatte eher an so etwas gedacht:
Object A ist jetzt vom Typ X
mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
- Defnull
- User
- Beiträge: 778
- Registriert: Donnerstag 18. Juni 2009, 22:09
- Wohnort: Göttingen
- Kontaktdaten:
Woher soll Python denn wissen, wie man aus Objekten der Klasse A ein Objekt der Klasse B macht, wenn du es ihm nicht sagst? Mit Magie geht das sicher nicht 

Bottle: Micro Web Framework + Development Blog
Hallo,
Beispiel:
Aus ein A Objekt sollte doch ohne Probleme ein B Objekt machen lassen, oder irre ich mich?
Das aus ein B Objekt kein A Objekt werden kann, leuchtet mir ein
mfg
Twilo
wenn Object A alle Methoden und Eigenschaften wie Typ X hat, sollte es doch gehen, oder?Defnull hat geschrieben:Woher soll Python denn wissen, wie man aus Objekten der Klasse A ein Objekt der Klasse B macht, wenn du es ihm nicht sagst? Mit Magie geht das sicher nicht
Beispiel:
Code: Alles auswählen
class A:
def test1(self):
pass
class B(A)
def test2(self):
pass
a = A()
Das aus ein B Objekt kein A Objekt werden kann, leuchtet mir ein

mfg
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Das sehe ich genau andersherum. Ein Exemplar von B hat alle Informationen um ein Exemplar von A darstellen zu können. Umgekehrt gilt das nicht unbedingt.Twilo hat geschrieben:Aus ein A Objekt sollte doch ohne Probleme ein B Objekt machen lassen, oder irre ich mich?Code: Alles auswählen
class A: def test1(self): pass class B(A) def test2(self): pass a = A()
Das aus ein B Objekt kein A Objekt werden kann, leuchtet mir ein
- pillmuncher
- User
- Beiträge: 1531
- Registriert: Samstag 21. März 2009, 22:59
- Wohnort: Pfaffenwinkel
Wenn zwei Objekte dieselben Attribute haben, dann sind sie schon vom selben Typ. Beispiel:Twilo hat geschrieben:wenn Object A alle Methoden und Eigenschaften wie Typ X hat, sollte es doch gehen, oder?
Code: Alles auswählen
class X(object):
def test(self):
return "in X.test()"
class Y(object)
def test(self):
return "in Y.test()"
def print_test(o):
print o.test()
x = X()
y = Y()
print_test(x)
print_test(y)
Ich weiß wirklich nicht, was du damit meinst, "aus einem A Objekt ein B Objekt machen". Ein Objekt ist, was es ist. Es hat Attribute, und die kann man sowieso zur Laufzeit ändern, man kann auch zur Laufzeit Methoden hinzufügen oder bestehende überschreiben, man kann sogar die Klasse wechseln, aber das Objekt bleibt es selbst und wird kein anderes. Du wirst ja auch nicht zu einer anderen Person, wenn du von der Goethe- in die Schillerstraße umziehst (aber dein Attribut "wohnt in" wird ein anderes). Mich würde wirklich interessieren, warum du da überhaupt irgendwas wechseln willst.Twilo hat geschrieben:Aus ein A Objekt sollte doch ohne Probleme ein B Objekt machen lassen, oder irre ich mich?Code: Alles auswählen
class A: def test1(self): pass class B(A) def test2(self): pass a = A()
Dann versuch mal:Twilo hat geschrieben:Das aus ein B Objekt kein A Objekt werden kann, leuchtet mir ein
Code: Alles auswählen
x = B()
x.__class__ = A
x.test2()
Mick.
In specifications, Murphy's Law supersedes Ohm's.
Hallo,
Ich will eigentlich Methoden hinzufügen (bzw. ändern).
Wenn das auch irgendwie anders geht, bin ich ganz ohr
Twilo
okpillmuncher hat geschrieben:Wenn zwei Objekte dieselben Attribute haben, dann sind sie schon vom selben Typ. Beispiel:Twilo hat geschrieben:wenn Object A alle Methoden und Eigenschaften wie Typ X hat, sollte es doch gehen, oder?Das heißt Duck-Typing.Code: Alles auswählen
class X(object): def test(self): return "in X.test()" class Y(object) def test(self): return "in Y.test()" def print_test(o): print o.test() x = X() y = Y() print_test(x) print_test(y)
ok, ich hatte mich wohl falsch Ausgedrückt, ich will dass das eine Objekt nicht mehr von der Klasse A sondern von der Klasse B ist. Mit __class__, wie du es weiter unten in ein Beispiel gezeigt hast, funktioniert das so weit ganz gut. Mit das zurückgegebene java-Objekt klappt das jedoch nicht.pillmuncher hat geschrieben:Ich weiß wirklich nicht, was du damit meinst, "aus einem A Objekt ein B Objekt machen". Ein Objekt ist, was es ist. Es hat Attribute, und die kann man sowieso zur Laufzeit ändern, man kann auch zur Laufzeit Methoden hinzufügen oder bestehende überschreiben, man kann sogar die Klasse wechseln, aber das Objekt bleibt es selbst und wird kein anderes. Du wirst ja auch nicht zu einer anderen Person, wenn du von der Goethe- in die Schillerstraße umziehst (aber dein Attribut "wohnt in" wird ein anderes). Mich würde wirklich interessieren, warum du da überhaupt irgendwas wechseln willst.Twilo hat geschrieben:Aus ein A Objekt sollte doch ohne Probleme ein B Objekt machen lassen, oder irre ich mich?Code: Alles auswählen
class A: def test1(self): pass class B(A) def test2(self): pass a = A()
Ich will eigentlich Methoden hinzufügen (bzw. ändern).
Wenn das auch irgendwie anders geht, bin ich ganz ohr

wenn ich das probiere, erhalte ich folgende Fehlermeldung:pillmuncher hat geschrieben:Dann versuch mal:Twilo hat geschrieben:Das aus ein B Objekt kein A Objekt werden kann, leuchtet mir einCode: Alles auswählen
x = B() x.__class__ = A x.test2()
mfgartifact.__class__ = Test
TypeError: __class__ assignment: only for heap types
Twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Für deine Anforderungen ist IMHO eine Wrapper-Klasse am sinnvollsten. Wie das umzusetzen ist, habe ich bereits gepostet.
P.S. Bei mir funktioniert dieses Beispiel mit der Klasse ändern. (Bekomme natürlich den erwarteten ``AttributeError``) Hast du wohl nicht richtig umgesetzt. Deine Klasse ``Test`` müsste eine Basisklasse von ``artifact.__class__`` sein.
P.S. Bei mir funktioniert dieses Beispiel mit der Klasse ändern. (Bekomme natürlich den erwarteten ``AttributeError``) Hast du wohl nicht richtig umgesetzt. Deine Klasse ``Test`` müsste eine Basisklasse von ``artifact.__class__`` sein.
@ice2k3: Du hast das auch mit Jython gemacht? Und versucht die Klasse eines Exemplars von einer *Java-Klasse* auf diese Weise zu ändern? Alternativ kannst Du es in CPython ja mal mit einer Klasse versuchen, die in C implementiert ist. Da gibt's auch genug Möglichkeiten mit der Technik aufzulaufen.
Hallo,
mfg
twilo
die Klasse Test ist von ArtifactSoapDO abgeleitet; der Rückgabewert soll laut Java-Doc vom Typ ArtifactSoapDO sein.ice2k3 hat geschrieben:P.S. Bei mir funktioniert dieses Beispiel mit der Klasse ändern. (Bekomme natürlich den erwarteten ``AttributeError``) Hast du wohl nicht richtig umgesetzt. Deine Klasse ``Test`` müsste eine Basisklasse von ``artifact.__class__`` sein.
mfg
twilo
[url=http://www.farb-tabelle.de/][b]Farbtabelle[/b][/url]
Ähm nein, aber es ging bei diesem Beispiel ja eigentlich auch nur darum, ihm zu zeigen, dass er gerade falsch herum gedacht hat...BlackJack hat geschrieben:@ice2k3: Du hast das auch mit Jython gemacht? Und versucht die Klasse eines Exemplars von einer *Java-Klasse* auf diese Weise zu ändern? Alternativ kannst Du es in CPython ja mal mit einer Klasse versuchen, die in C implementiert ist. Da gibt's auch genug Möglichkeiten mit der Technik aufzulaufen.
Dass er das produktiv einsetzen soll hat ja wohl keiner behauptet, auf jeden Fall nicht ich
