根据类型重新定义基于另一个类函数的python函数

时间:2013-11-19 04:31:19

标签: python numpy matrix

我更像是一名工程师,而不是一名程序员,但我知道足够多的python和C ++是危险的。

我正在创建一个python vector / matrix类作为基于numpy和cvxopt的帮助类。总体目标(我已经获得......这个问题的答案只会使课程更好)是使点积和其他过程更加统一,更容易用于数值方法。

但是,我想让我的帮助班更加透明。我想要做的是根据使用的当前变量重新定义cvxopt.matrix()init函数。这就是说,如果我有一个自定义矩阵:“cstmat”,我希望函数“cvxopt.matrix(cstmat)”由我自己的方法定义,而不是在cvxopt类中编写。

简而言之,我想“拦截”其他函数调用并使用我自己的函数。

但最重要的是,我不想接管cvxopt.matrix( any_ 其他 _type )。我只想重新定义函数,当它调用我自己的自定义类时。这可能吗?

谢谢, 乔恩

1 个答案:

答案 0 :(得分:0)

你可以做到这一点,但它并不漂亮。

你可以沿着这些方向做点什么:

cvxopt._orig_matrix = cvxopt.matrix

def my_matrix(*args, **kwargs):
    if isinstance(arg[0], cstmat):
        # do your stuff here
    else:
        cvxopt._orig_matrix(*args, **kwargs)

cvxopt.matrix = my_matrix

但你可能最好找一个不太奇怪的方式。并没有任何保证不会忘记谁自己"是

最好是使用继承!有点像这样:

class Cstmat(cvsopt.matrix):
    def __init__(self, ...):
        pass

    def matrix(self, arg):
        if isinstance(arg, cstmat):
            # do your stuff here
        else:
            cvsopt.matrix(arg)