我試圖創建一個名為新類MyFunction這是一個單變數函式。
它繼承自sympy.Function以獲得相同的屬性,但我在使用該__new__方法時遇到了問題。
我的目標是讓它發揮作用
import sympy as sp
# class definition
x = MyFunction("x")
dx = x.dt
已經可以使用的等效代碼:
import sympy as sp
t = sp.symbols("t")
x = sp.Function("x")(t)
dx = sp.diff(x, t)
繼承自的類 sp.Function
import sympy as sp
class MyFunction(sp.Function):
def __new__(cls, name):
t = sp.symbols("t")
# Now we do just like 'sp.Function("x")(t)'
self = super().__new__(cls, name)(t) # Error
self.time = t
return self
@property
def dt(self):
return sp.diff(self, self.time)
x = MyFunction("x")
dx = x.dt
print(x) # expected print 'x(t)'
print(dx) # expected print 'Derivative(x(t), t)'
收到的錯誤是
self = super().__new__(cls, name)(t) # Error
TypeError: 'MyFunction' object is not callable
我試圖從另一個類(如sp.core.function.UndefinedFunction)繼承,但它給出了錯誤
AttributeError: 'x' object has no attribute 'dt'
現在我不知道如何繼續并解決它。
uj5u.com熱心網友回復:
如果我理解正確:
import sympy as sp
class MyFunction(sp.Function):
def __new__(cls, name):
t = sp.symbols("t")
self = sp.Function(name)(t)
self.time = t
self.dt = sp.diff(self, self.time)
return self
x = MyFunction("x")
dx = x.dt
print(x)
print(dx)
結果:
x(t)
Derivative(x(t), t)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/345007.html
