Überwindung der Einschränkungen von Python bezüglich der Instanzmethoden

8

Python scheint einige Einschränkungen bezüglich der Instanzmethoden zu haben.

  1. Instanzmethoden können nicht kopiert werden.
  2. Instanzmethoden können nicht markiert werden.

Das ist problematisch für mich, weil ich an einem sehr objektorientierten Projekt arbeite, in dem ich Instanzmethoden referenziere und beide Deepcopying verwenden und Beizen. Das Beizen geschieht meist durch den Multiprocessing-Mechanismus.

Was wäre ein guter Weg, dies zu lösen? Ich habe eine hässliche Umgehung des Kopierproblems gemacht, aber Ich suche nach einer besseren Lösung für beide Probleme.

Hat jemand irgendwelche Vorschläge?

Aktualisierung:

Mein Anwendungsfall: Ich habe ein kleines Ereignissystem. Jedes Ereignis hat ein .action -Attribut, das auf eine Funktion zeigt, die es auslösen soll, und manchmal ist diese Funktion eine Instanzmethode eines Objekts.

    
Ram Rachum 25.11.2009, 17:13
quelle

3 Antworten

15

Sie können dies möglicherweise mithilfe von copy_reg.pickle tun. In Python 2.6:

%Vor%

Dies speichert nicht den Code der Methode, sondern nur dessen Namen; aber das wird im allgemeinen Fall richtig funktionieren.

Dies macht sowohl Beizen als auch Kopieren möglich!

    
Jason Orendorff 25.11.2009, 18:08
quelle
3

REST - Repräsentationsstatusübertragung. Sende einfach State, nicht Methoden.

Um ein Objekt X von A nach B zu übertragen, machen wir das.

  1. A kodiere den Zustand von X in einigen handliche, einfach zu parsen Notation. JSON ist beliebt.

  2. A sendet den JSON-Text an B.

  3. B dekodiert den Zustand von X-Form JSON Notation, X rekonstruierend.

B muss die Klassendefinitionen für die Klasse von X haben, damit dies funktioniert. B muss alle Funktionen und andere Klassendefinitionen haben, von denen die Klasse von X abhängt. Kurz gesagt, beide A und B haben alle Definitionen. Nur eine Darstellung des Objektstatus wird verschoben herum.

Siehe einen Artikel über REST.

Ссылка

Ссылка

    
S.Lott 25.11.2009 17:36
quelle
-3

picken Sie die Instanz und greifen Sie nach dem Entpacken auf die Methode zu. Das Auswählen einer Methode einer Instanz ist nicht sinnvoll, da sie auf der Instanz beruht. Wenn nicht, schreibe es als unabhängige Funktion.

%Vor%     
prime_number 25.11.2009 17:40
quelle

Tags und Links