我創建了一個名爲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())
我繼承FitFunction
創建Gaussian
因爲我申請Gaussian
許多不同的數據集使用相同的參數,這樣我可以比較的輸出。
以供參考,這是當我執行該文件會發生什麼:
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'與'__init__'的'def'對齊,而不是內部函數的'def'。 – Blckknght