我正在写一个库,我可以用库中的对象构造表达式。例如,x
和{
# below is a simplified version of my class
class MySymbol(object):
import random
_random_value = random.randint(1,4)
def __init__(self, value):
self.value = value
def __add__(self, symbol):
return MySymbol(self.value + symbol.value)
def __mul__(self, symbol):
return MySymbol(self.value * symbol.value)
def __repr__(self):
return str(self.value)
def _get_random_value(self):
return self._random_value
x,y = sympy.symbols('x y')
x = MySymbol(9)
y = MySymbol(3)
import sympy
A = sympy.Matrix([[x,y],[x,y]])
B = sympy.Matrix([[x+y,x*y]])
矩阵运算也是如此。当我希望这些元素保持其类型MySymbol
时,sympy.Matrix
类将这些元素转换为sympy.core.numbers.Integer
:
现在,因为BA[0,0]
不再是MySymbol
类型,我无法调用我想要的方法:
BA[0,0]._get_random_value() # DOES NOT WORK
>> AttributeError: 'Integer' object has no attribute '_get_random_value'
expression = x*x+y*x+x*x*y
expression._get_random_value() # THIS DOES WORK
>> 4
如何利用来自sympy.Matrix
的矩阵乘法,但仍然允许矩阵的元素保留其类类型{_get_random_value()
)都可以访问?在
你需要从一个SymPy类的子类中使用它。根据您的类正在做什么,将告诉您要子类化哪个类,但是最典型的超类是
Expr
。请看我对一个非常相似的问题的回答here。在相关问题 更多 >
编程相关推荐