1

I want to write an extension to python's lib cairo. The plan is as follows:

cairo has a class named "Context" which is the canvas that the user draws geometric objects on it.

For example let cr be an instance of Context, then

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

will move the pen to (a,b) and then draw a line to (c,d).

I want to add another method to this lib, for example it's named "My_line_to": this function will draw an curve between (a,b) and (c,d),not a straight line.( I still call it line_to() because it's geodesic line in hyperbolic geometry)

The usage is

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

I think I'd better make this extension into another file named "MyDrawer.py", but I have no idea how to implement this. I want to know what is the standard/elegant way to write one's extension of an existing module in this case?

feetwet
  • 3,248
  • 7
  • 46
  • 84
zhaoL
  • 89
  • 4
  • I found a duplicate question: http://stackoverflow.com/questions/2705964/how-do-i-extend-a-python-module-python-twitter – Chris Ghyzel Mar 30 '16 at 01:37

1 Answers1

1

Subclassing is your friend here. Just subclass the Context class and define an additional method.

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

Then, when you want to use this new class, just import it and use it.

Akshat Mahajan
  • 9,543
  • 4
  • 35
  • 44