编写对现有python模块的扩展

编写对现有python模块的扩展,python,pycairo,Python,Pycairo,我想为python的libcairo编写一个扩展。计划如下: cairo有一个名为“Context”的类,该类是用户在其上绘制几何对象的画布 例如,让cr成为上下文的一个实例,然后 cr.move_to(a,b) cr.line_to(c,d) 将笔移动到(a,b),然后在(c,d)处画一条线 我想在这个库中添加另一个方法,例如它被命名为“My_line_to”:这个函数将在(a,b)和(c,d)之间绘制一条曲线,而不是一条直线。(我仍然称它为line_to(),因为它是双曲几何中的测地线)

我想为python的lib
cairo
编写一个扩展。计划如下:

cairo
有一个名为“Context”的类,该类是用户在其上绘制几何对象的画布

例如,让
cr
成为上下文的一个实例,然后

cr.move_to(a,b)
cr.line_to(c,d)
将笔移动到(a,b),然后在(c,d)处画一条线

我想在这个库中添加另一个方法,例如它被命名为“My_line_to”:这个函数将在(a,b)和(c,d)之间绘制一条曲线,而不是一条直线。(我仍然称它为line_to(),因为它是双曲几何中的测地线)

用法是

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

我想我最好把这个扩展名放到另一个名为“MyDrawer.py”的文件中,但我不知道如何实现它。我想知道在这种情况下,编写现有模块扩展的标准/优雅方式是什么?

子类化是您的朋友。只需对
上下文
类进行子类化,并定义一个附加方法

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
然后,当您想要使用这个新类时,只需导入它并使用它

我发现了一个重复的问题: