我更像是一名工程师,而不是一名程序员,但我知道足够多的python和C ++是危险的。
我正在创建一个python vector / matrix类作为基于numpy和cvxopt的帮助类。总体目标(我已经获得......这个问题的答案只会使课程更好)是使点积和其他过程更加统一,更容易用于数值方法。
但是,我想让我的帮助班更加透明。我想要做的是根据使用的当前变量重新定义cvxopt.matrix()init函数。这就是说,如果我有一个自定义矩阵:“cstmat”,我希望函数“cvxopt.matrix(cstmat)”由我自己的方法定义,而不是在cvxopt类中编写。
简而言之,我想“拦截”其他函数调用并使用我自己的函数。
但最重要的是,我不想接管cvxopt.matrix( any_ 其他 _type )。我只想重新定义函数,当它调用我自己的自定义类时。这可能吗?
谢谢, 乔恩
答案 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)