2016-03-30 3 views
1

Je veux écrire une extension au lib cairo de python. Le plan est le suivant:Écrire une extension à un module pongon existong

cairo a une classe nommée "Contexte" qui est le canevas sur lequel l'utilisateur dessine des objets géométriques.

Par exemple let cr une instance de contexte, puis

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

déplacera le stylo à (a, b), puis tracer une ligne à (c, d).

Je souhaite ajouter une autre méthode à cette lib, par exemple elle s'appelle "My_line_to": cette fonction dessine une courbe entre (a, b) et (c, d), pas une ligne droite. il LINE_TO() parce qu'elle est la ligne géodésique en géométrie hyperbolique)

L'utilisation est

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

Je pense que je ferais mieux de faire cette extension dans un autre fichier nommé « MyDrawer.py », mais je ne sais pas comment mettre en œuvre cela. Je veux savoir quelle est la manière standard/élégante d'écrire l'extension d'un module existant dans ce cas? Merci pour vos suggestions utiles.

+0

J'ai trouvé une question en double: http://stackoverflow.com/questions/2705964/how-do-i-extend-a-python-module-python-twitter –

Répondre

1

Sous-classe est votre ami ici. Il suffit de sous-classer la classe Context et de définir une méthode supplémentaire.

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 

Ensuite, lorsque vous souhaitez utiliser cette nouvelle classe, il vous suffit de l'importer et de l'utiliser.