如何向sympy中扩展“Poly”类的类添加参数?

2024-04-20 15:34:19 发布

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

我试图创建一个名为PolyExt的类,它是SymPy中Poly类的扩展。而且,它有自己的__init__方法。但问题是,当它通过继承的Poly类中的__new__方法时,我添加到__init__方法的额外参数会被解释为*gens参数的一部分。有什么优雅的方法吗?你知道吗

下面是如何再现错误:

class PolyExt(Poly):

    def __init__(self, expression, symb1, symb2):
        self.symb1 = symb1
        self.symb2 = symb2
        super(PolyExt, self).__init__(expression)

x = symbols('x')
y = symbols('y')

PolyExt(x+y, [y], [x])

而且,Poly类如下所示:

class Poly(Expr):
    """Generic class for representing polynomial expressions."""

    __slots__ = ['rep', 'gens']

    is_commutative = True
    is_Poly = True

    def __new__(cls, rep, *gens, **args):
        """Create a new polynomial instance out of something useful. """
        opt = options.build_options(gens, args)

我尝试为symb1symb2使用关键字参数,但同样,Poly类的__new__方法会遇到阻碍,请尝试下面的代码

class PolyExt(Poly):

    def __init__(self, expression, **kwargs):
        self.symb1 = kwargs['symb1']
        self.symb2 = kwargs['symb2']
        super(PolyExt, self).__init__(expression)

x = symbols('x')
y = symbols('y')

PolyExt(x+y, symb1=[y], symb2=[x])

我能做些什么来解决这个问题?我是否需要编写自己的__new__方法来重写class PolyExt中的方法?或者是我错过了什么?你知道吗

谢谢你。你知道吗


Tags: 方法selfnew参数initdefkwargsclass
1条回答
网友
1楼 · 发布于 2024-04-20 15:34:19

您还需要使用__new__

from sympy import *
from sympy.abc import x, y

class PolyExt(Poly):

    def __new__(self, expression, symb1, symb2):
        obj = Poly.__new__(self, expression)
        obj.symb1 = symb1
        obj.symb2 = symb2
        return obj

x = symbols('x')
y = symbols('y')

p = PolyExt(x+y, [y], [x])
print(p.symb1)

相关问题 更多 >