我有一个 SymPy 符号变量:
from sympy import symbols
x=symbols('x')
如何向符号变量 x
添加新字段?
x.New_Field=Arbitrary_Value
最佳答案
您不能动态地将属性添加到Symbol
。
这很可能是个坏主意,因为 SymPy 假定它可以替换比较相等的表达式。因此,如果您创建了两个符号并将一个属性动态存储在一个符号中(假设这是可能的)
a1 = Symbol('a')
a2 = Symbol('a')
a1.something = 0
然后 SymPy 会随意交换 a1
和 a2
,因为它们比较相等(a1 == a2
),这肯定会产生意想不到的后果。
如果你看一下 source code ,你可以看到 Symbol
出于性能原因在其类中定义了 __slots__
,这有效地告诉解释器“这些都是此类中的实例属性”。这就是为什么您不能向Symbol
动态添加属性。
一个可能的替代方法是创建一个 Symbol
的子类,将您想要的属性存储在它的 args
中,这样它们就会被考虑到您的子类对象的相等性比较中.
有关我在此处稍微解释的主题的扩展讨论,请参阅 Google 线程:How to equip a Symbol with an additional attribute?
关于python - 向 sympy 符号变量添加一个新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38449055/