2016-03-30 4 views
1

Ich möchte eine Erweiterung zu Python lib Kairo schreiben. Der Plan ist wie folgt:Schreiben Sie eine Erweiterung zu einem existong Python-Modul

cairo hat eine Klasse namens "Context", die die Leinwand ist, die der Benutzer geometrische Objekte darauf zeichnet.

Zum Beispiel lassen cr eine Instanz von Context sein, dann

cr.move_to(a,b) 
cr.line_to(c,d) 

wird, den Stift zu (a, b) bewegen und dann in eine Linie zeichnen (c, d).

Ich möchte eine andere Methode zu dieser Lib hinzufügen, zum Beispiel heißt es "My_line_to": Diese Funktion zeichnet eine Kurve zwischen (a, b) und (c, d), keine gerade Linie. (Ich rufe immer noch an es LINE_TO(), weil es geodätische Linie in der hyperbolischen Geometrie)

Die Nutzung ist

cr.my_move_to(a,b) 
cr.my_line_to(c,d) 

ist glaube ich besser, diese Erweiterung in einer anderen Datei machen würde den Namen „MyDrawer.py“, aber ich habe keine Ahnung, wie man das umsetzt. Ich möchte wissen, was ist der Standard/elegante Weg, um die Erweiterung eines bestehenden Moduls in diesem Fall zu schreiben? Vielen Dank für hilfreiche Vorschläge.

+0

Ich habe eine doppelte Frage gefunden: http://stackoverflow.com/questions/2705964/how-do-i-e-tend-a-python-module-python-twitter –

Antwort

1

Subclassing ist dein Freund hier. Unterklassen Sie einfach die Klasse Context und definieren Sie eine zusätzliche Methode.

from cairo import Context # or whatever is the path name 
class ExtendedContext(Context): # subclass from ExtendedContext - inherits all methods and variables from Context 
    def my_line_to(self, x, y): 
     # define code here 
    def my_move_to(self, x, y): 
     # define code here 

Wenn Sie diese neue Klasse verwenden möchten, importieren Sie sie einfach und verwenden Sie sie.