1

私は、FitFunction私が示したものを超えてたくさんのものを追加するという名前のファクトリ クラスを作成しました。label メソッド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() )

出力を比較できるように、同じパラメーターを持つ多くの異なるデータセットに適用するため、作成するサブクラスFitFunctionを作成します。GaussianGaussian

参考までに、ファイルを実行すると次のようになります。

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)
4

2 に答える 2

0

今は自分で確認できないため、これで問題が解決するかどうかはわかりませんが、おそらく基本クラスのメソッドを装飾するために使用する必要があります@abc.abstractstaticmethod(明らかに引数を取り除きます)。selfそれでも解決しない場合は、後でこの回答を削除します。修正された場合は、これを編集してより良い回答にします。

于 2016-09-30T02:52:44.160 に答える
0

使用する:

print("Gaussian.pretty_string: %s" % Gaussian.pretty_string())

または、探している文字列であるmethod を呼び出した結果ではなく、reprmethodのを出力しています。

于 2016-09-29T23:53:57.503 に答える