latex打印继承ipython中的Symphy类时行为不一致
我想覆盖SymPy对象的latex打印继承ipython中的Symphy类时行为不一致,python,ipython,sympy,Python,Ipython,Sympy,我想覆盖SymPy对象的\uuuu str\uuuu属性;然而,我发现令人困惑的行为。我从这个MWE开始: from sympy.core.numbers import One from sympy import Basic class MyOne(One): def __str__(self): return "This isn't one" __repr__ = __str__ class MyBasic(Basic): def __str
\uuuu str\uuuu
属性;然而,我发现令人困惑的行为。我从这个MWE开始:
from sympy.core.numbers import One
from sympy import Basic
class MyOne(One):
def __str__(self):
return "This isn't one"
__repr__ = __str__
class MyBasic(Basic):
def __str__(self):
return "This isn't basic"
__repr__ = __str__
我的环境是ipython qtconsole
with
import sympy
sympy.init_session()
我发现不一致的行为:
In[]: MyOne()
Out[]: 1
In[]: MyBasic()
Out[] Thisisn'tbasic
这两个结果似乎都是迟来的。第一个结果——1——出乎意料。我希望这不是我的音调,就像我的\uu str\uu
函数一样。str
和repr
的结果与预期一致。发生什么事?显示
的实际功能是什么?初始化会话
(以及初始化打印
)启用SymPy LaTeX打印机。如果要定义要打印的latex字符串,需要重写\u latex(self,printer)
方法(请参阅)
看到您的行为的原因是
One
定义了一个LaTeX打印机,所以它的子类使用它Basic
没有,因此它返回到\uuuuu\uuuu
方法 谢谢,所以你链接到的文档有点误导人,因为在这个例子中,他们确实覆盖了使用custromstrprenter的uu str uu方法,然后是Basic。u str uu=lambda self:customstrprenter(),你能解释为什么sympy使用新的打印属性吗?为什么不仅仅是普通的\uuuu str\uuuu
?SymPy有许多不同的打印机。此外,打印机方法传入打印机以打印子对象。这使您可以使用自定义打印机子类自定义打印。有关更多信息,请参阅我链接到的文档页面。