首页 文章

在sympy符号变量中添加一个新字段

提问于
浏览
4

我有一个SymPy符号变量:

from sympy import symbols 
x=symbols('x')

如何在符号变量 x 中添加新字段?

x.New_Field=Arbitrary_Value

1 回答

  • 4

    您无法动态地将属性添加到 Symbol .

    这很可能是一个坏主意,因为SymPy假设它可以替换相等的表达式 . 因此,如果您创建了两个符号并将一个属性动态存储在一个中(假设这是可能的)

    a1 = Symbol('a') 
    a2 = Symbol('a') 
    a1.something = 0
    

    然后SymPy可以自由地交换 a1a2 ,只要它们感觉这样做,因为它们比较平等( a1 == a2 ),这肯定会产生意想不到的后果 .

    如果您查看source code,您可以看到 Symbol 在其类中定义了 __slots__ ,这是出于性能原因,它有效地告诉解释器“这些是此类中的所有实例属性” . 这就是您无法动态向 Symbol 添加属性的原因 .

    一种可能的替代方法是创建一个 Symbol 的子类,它将所需的属性存储在 args 中,这样它们就会被分解为子类对象的相等比较 .


    有关我在这里有所解释的主题的扩展讨论,请参阅Google主题:How to equip a Symbol with an additional attribute?

相关问题