このクラス(MLE)が同様の機能を持つサブクラス(NormMLE、BinMLE)のセット(set_param()、fit()など)を呼び出すような汎用クラスを作成しようとしていますPythonスーパークラスがサブクラスを呼び出す
class MLE:
def __init__(self, mclass):
self.mle = mclass()
def set_param(self, param):
self.mle.set_param(param)
def fit(self):
self.mle.fit()
class NormMLE():
def __init__(self):
print "Initialize NormMLE"
self.u = 0
self.v = 0
def set_param(self, param):
self.u = param[0]
self.v = param[1]
print self.u
print self.v
def fit(self):
return self.u*self.v
class BinMLE():
def __init__(self):
print "Initialize BinMLE"
def set_param(self, param):
self.u = param[0]
self.v = param[1]
self.w = param[2]
print self.u
print self.v
print self.w
def fit(self):
return self.u + self.v + self.w
nmle = MLE(NormMLE)
nparam = [1,2]
nmle.set_param(nparam)
print nmle.fit()
bmle = MLE(BinMLE)
bparam = [1,2,3]
bmle.set_param(bparam)
print bmle.fit()
私がfit()を呼び出すと、結果はNoneを返します。
Initialize NormMLE
1
2
None
Initialize BinMLE
1
2
3
None
ここで、私はOOPの概念がPythonで間違っているはずです。スーパークラスがset_param()とfit()を別々に呼び出した場合、サブクラスでパラメータw、v、およびオプションでwにアクセスできないようです...
OOPを達成する正しい方法がわかりますそうしたいです?
def fit(self):
self.mle.fit()
おそらく、あなたはself.mle.fit()
コールからの結果を通過したかった:それは明示的なreturn
文を持っていないので、
ここに継承はありません。スーパークラスまたはサブクラスはありません。あなたは**封じ込め**を持っています。 –