1 回答

TA貢獻1806條經驗 獲得超8個贊
我編寫了一個小解決方案,將自定義 matlab 類與 oct2py 一起使用。目前,這種方法僅支持訪問 Matlab 類的成員函數(而不是屬性),因為這正是我所需要的:
from oct2py import octave
class MatlabClass():
_counter = 0
def __init__(self, objdef) -> None:
"""Use matlab object as python class.
Args:
objdef (str): Class initialization as string.
"""
MatlabClass._counter += 1
self.name = f"object_for_python{MatlabClass._counter}"
octave.eval(f"{self.name} = {objdef};")
def __getattr__(self, item):
"""Maps values to attributes.
Only called if there *isn't* an attribute with this name
"""
def f(*args):
call = f"{self.name}.{item}({','.join([str(arg) for arg in args])});"
return octave.eval(call)
return f
按如下方式使用此類:
param = 0.24 # random value you might need for class initialization
oclass = MatlabClass(f"BasicClass({param})")
x = oclass.roundOff()
y = oclass.multiplyBy(2)
注意:您可能需要在 Octave 代碼中使用 init 函數來運行設置 Value 變量。
添加回答
舉報