我正在尝试创建一个名为 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)
我尝试为 symb1
和 symb2
使用关键字参数,但同样,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/