我想要一个自定义类,原则上它的行为类似于 sympy
Function
,但也包含一个字符串。但是,当我从 sympy Function 创建派生类时,以下代码会产生错误(“无法解析 'a b'):
import sympy as sp
class testClass(sp.Function):
pass
a = testClass('a b')
我知道 sympify 函数被调用,并且在将 'a b' 解析为 sympy 表达式时遇到问题。作为满足我的需求的可能解决方法,我发现
a = testClass(sp.Symbol('a b'))
会起作用的。不过,在这里避免使用 Symbol 会很有趣。根据我的理解,要使其正常工作,我必须重新实现
__new__
方法。这是正确的还是有简单的解决方案?
根据奥斯卡·本杰明的评论,我的作品如下:
import sympy as sp
class testClass(sp.Function):
def __new__(cls, *args, **kwargs):
new_args = (sp.Symbol(x) if isinstance(x, str) else x for x in args)
return super().__new__(cls, *new_args, **kwargs)
# other methods...
c = testClass('a b')