【问题标题】:"Substitude" parent class in python or make Sympy's objects display in latex by default在 python 中“替换”父类或使 Sympy 的对象默认显示在 Latex 中
【发布时间】:2021-11-25 16:28:22
【问题描述】:

目标是显示 sympy 的对象(它们都继承自 Printable 类)不是在 sstr() 中,而是在默认情况下在 latex() 中

例子:

from sympy import symbols, sqrt
x, y = symbols('x y')
print(f'its {sqrt(x)} and {sqrt(y)}')
#output:
'its \\sqrt(x) and \\sqrt(y)'

如果我更改 sympy 的源代码编辑 Printable Class'__str__ 方法,这将有效。 有什么方法可以让导入的 sympy 的类继承自我的类,而不是源类而不编辑实际源?

我试过这个:

from sympy.core._print_helpers import Printable
class PrintableWrapper(Printable):
    def __str__(self):
        from sympy.printing.latex import latex
        return latex(self, mode='plain')
    __repr__ = __str__
Printable = PrintableWrapper

from sympy import Symbol, sqrt
Printable = PrintableWrapper
A = Symbol("A")
print(f'{sqrt(A)}')
#output:
'sqrt(A)'

但是如你所见,它不起作用

我问的原因是因为我使用 Ipython 的 display(Math(f'...')) 函数来显示东西,我必须像这样将任何单个 sympy 对象包装到 latex() 中:

display(Math(f'its {latex(sqrt(x))} and {latex(sqrt(y))}''))

欢迎任何使f'its {sqrt(x)} and {sqrt(y)}' 工作的解决方案

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    需要重写内部类中的函数,扩展类保持内部类不变。

    from sympy.core._print_helpers import Printable
    from sympy.printing.latex import latex
    class PrintableWrapper:
        def __str__(self):
            return latex(self, mode='plain')
        __repr__ = __str__
    Printable.__repr__ = PrintableWrapper.__str__
    Printable.__str__  = PrintableWrapper.__str__
    
    from sympy import Symbol, sqrt
    Printable = PrintableWrapper
    A = Symbol("A")
    print(f'{sqrt(A)}')
    

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 2012-03-18
      • 1970-01-01
      相关资源
      最近更新 更多