FitFunction
というファクトリクラスを作成しました。これは、私が示したものを超えて、たくさんのものを追加しています。ラベルメソッドpretty_string
は、書かれた文字列を返します。このファイルを実行すると、repr
と同じくらい有用な文字列が出力されます。誰かがこれを実装する方法を知っていますか?抽象メソッドを持つファクトリクラス
#!/usr/bin/env python
from __future__ import print_function, absolute_import
import abc
import types
import numpy as np
class FitFunction(object):
def __init__(self, python_function):
assert isinstance(python_function, types.FunctionType)
self._py_function = python_function
@abc.abstractmethod
def pretty_string():
r"""
Return some pretty string.
"""
class Gaussian(FitFunction):
def __init__(self):
def gaussian(x, mu, sigma, A):
coeff = (_np.sqrt(2.0 * _np.pi) * sigma)**(-1.0)
arg = -.5 * (((x - mu)/sigma)**2.0)
return A * coeff * _np.exp(arg)
FitFunction.__init__(self, gaussian)
@staticmethod
def pretty_string():
return "1D Gaussian"
if __name__ == "__main__":
print("Gaussian.pretty_string: %s" % Gaussian().pretty_string())
私は出力を比較できるように、私は同じパラメータを使用して、多くの異なるデータセットにGaussian
を適用するので、私はGaussian
を作成するためにFitFunction
をサブクラス化。
me$ ./FitFunction_SO_test.py
Gaussian.pretty_string: <bound method Gaussian.pretty_string of <__main__.Gaussian object at 0x1005e2f90>>
私は次の結果を探しています:
は参考のために、これは私がファイルを実行するときに何が起こるかである
me$ ./FitFunction_SO_test.py
Traceback (most recent call last):
File "./FitFunction_SO_test.py", line 43, in <module>
print("Gaussian.pretty_string: %s" % Gaussian().pretty_string())
TypeError: pretty_string() takes no arguments (1 given)
あなたのインデントは 'Gaussian'クラスでは正しくないので、' pretty_string'は '__init__'メソッドのローカル変数として定義されています。 '@ staticmethod'と' def'が内部関数の 'def'ではなく' __init__'の 'def'で整列されていることを確認してください。 – Blckknght