Matlab 在静态基类方法中访问子类构造函数/方法

Matlab 在静态基类方法中访问子类构造函数/方法,matlab,class,oop,constructor,subclassing,Matlab,Class,Oop,Constructor,Subclassing,我有一个抽象基类Parent,和两个子类Child1和Child2。两个子系统都实现了一个由父系统抽象定义的静态方法,myStaticTransform 目标是在父类中创建一个静态方法,myStaticBuilder,该方法执行一些计算,调用相应的myStaticTransform方法,然后使用该数据创建相应子类的实例。现在我把它定义为一个实例方法 %Parent.m 函数child=myNotStaticBuilder(此函数) %做复杂的数学 x=1+2; %转换数据(这意味着子类将分派其适

我有一个抽象基类
Parent
,和两个子类
Child1
Child2
。两个子系统都实现了一个由父系统抽象定义的静态方法,
myStaticTransform

目标是在父类中创建一个静态方法,
myStaticBuilder
,该方法执行一些计算,调用相应的
myStaticTransform
方法,然后使用该数据创建相应子类的实例。现在我把它定义为一个实例方法

%Parent.m
函数child=myNotStaticBuilder(此函数)
%做复杂的数学
x=1+2;
%转换数据(这意味着子类将分派其适当的方法
y=这个.myStaticTransform(x);
%以我知道的唯一方式获取儿童构造器(这很恶心,我讨厌它,但耸耸肩表情符号)
childConstructor=str2func(类(this));
%返回适当的子对象
child=childConstructor(y);
结束
这不是安抚,但很有效,所以我可以接受。就我所见,这是互联网认为应该做的。很好

但理想情况下,我希望将此函数设置为静态,因为它在调用之前不依赖任何对象。如果这是静态的,显然我无法引用此(很明显我是Python程序员)。如果没有该引用,我不知道如何访问子构造函数。据我所知,我还必须调用
Parent.myStaticTransform
,我认为(但尚未验证)会抛出错误,因为父实现是抽象的

有没有一种方法可以像我所希望的那样将其转化为一种静态方法,或者我应该庆幸Matlab有类,而不是期望它们做得对吗

在Python中,我将使用类方法而不是静态方法,据我所知,这是Matlab没有的概念

@classmethod
def myClassBuilder(cls):
#做复杂的数学
x=1+2;
#转换数据
y=cls.myStaticTransform(x)
#返回适当的子对象
child=cls(y)
返回儿童

如何在Python的静态方法中获得对子构造函数的引用?我不明白这在任何语言中都是怎么可能的?如果没有对象,就没有类可引用。@CrisLuengo编辑了我的文章来解释。我会使用classmethod而不是静态方法,因为Matlab没有eq非常抱歉我的无知,但是你如何调用这个类方法呢?作为
Child.myClassBuilder()
?而不是作为
Parent.myClassBuilder()
,因为那时你仍然不知道该调用哪个子类方法。我在想,如果是这样的话,为什么不创建一个免费函数,作为
myClassBuilder('Child'))
?是的,在Python中它被称为Child1/2.myClassBuilder(),即使它是在父类中定义的。这是我希望的功能。我可以创建单独的函数,但我不认为这是一个比将方法保留为实例方法并创建占位符子实例来调用该方法更好的解决方案。再说一次,这本身不是一个坏的解决方案,我只想如果功能存在,请选择“正确的方式”。