如何重载从函数类继承的个人函数的fdiff方法?

2024-09-28 01:29:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个多项式函数p(n,x,y),其导数等于n/x*E(n,x,y)。我创建了如下函数:

from sympy.core.function import Function as Func, ArgumentIndexError

class P(Func) :        
    @classmethod     
    def eval(cls,n,x,y):        
        return Function('P')(n,x,y)  

class E(Func):    
    @classmethod     
    def eval(cls,n,x,y):        
        return Function('E')(n,x,y)

我已经说过:

def fdiff(self, argindex=1):
    if argindex == 1:
        return self.args[2]/self.args[0]*E(*self.args)        
    else:
        raise ArgumentIndexError(self, argindex)  

就在函数p的“eval”定义之后,例如在trigonometric.py中定义cos对sin的导数

然而,当我尝试:

>>> P(r, R, n).fdiff()

我获得:

Derivative(P(n,x,y), n)

在控制台中,我想得到n/x*E(n,x,y)


Tags: 函数selfreturndefevalargsfunctionclass
1条回答
网友
1楼 · 发布于 2024-09-28 01:29:46

您的eval正在返回Function('P'),这是一个完全不同的对象(一个名为“p”的匿名函数)eval应该用来计算特定的值(比如数字)。如果没有任何要计算的值,请不要定义eval

当我定义PE

class P(Function):
    def fdiff(self, argindex=1):
        if argindex == 1:
            return self.args[2]/self.args[0]*E(*self.args)
        else:
            raise ArgumentIndexError(self, argindex)


class E(Function):
    pass

它工作得很好

In [32]: P(r, R, n).diff(r)
Out[32]:
n⋅E(r, R, n)
────────────
     r

相关问题 更多 >

    热门问题