python - 如何在 sympy 中向扩展 `Poly` 类的类添加参数?

标签 python python-2.7 oop sympy

我正在尝试创建一个名为 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 中的方法?还是我还缺少其他东西?

谢谢。

最佳答案

您还需要使用 __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)

关于python - 如何在 sympy 中向扩展 `Poly` 类的类添加参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57514529/

相关文章:

python - 请求库在 Window 中有效,在 Linux 中超时

python - 在 IOError 上打开不同的文件

c++ - 如何使用包含内部类的类的实例有效地访问内部类的成员?

oop - 使用反射调用方法并返回值

c#方法继承直接子

构造此列表的 Pythonic 和简洁的方法?

python - 有没有办法在Python中查看DataProc集群的 'scheduled deletion'属性?

javascript - 使用 Json 和 BS4 抓取 HTML 中的脚本标签

python - ete3:如何从分类ID获取分类排名名称?

python - 在python中按句子结构对文本进行分类