Ich habe eine Factory-Klasse namens FitFunction
erstellt, die eine ganze Reihe von Sachen über das hinaus, was ich gezeigt habe. Die Label-Methode pretty_string
soll den String einfach wie geschrieben zurückgeben. Wenn ich diese Datei ausführe, druckt sie eine Zeichenfolge, die so nützlich ist wie die repr
. Weiß jemand, wie ich das umsetzen würde?Factory-Klasse mit Abstract-Methode
#!/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())
ich Unterklasse FitFunction
Gaussian
zu schaffen, weil ich Gaussian
zu vielen verschiedenen Datensätze mit den gleichen Parametern anwenden, so dass ich die Ausgabe vergleichen.
Als Referenz ist das, was passiert, wenn ich die Datei ausführen:
me$ ./FitFunction_SO_test.py
Gaussian.pretty_string: <bound method Gaussian.pretty_string of <__main__.Gaussian object at 0x1005e2f90>>
Ich bin für das folgende Ergebnis der Suche:
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)
Ihre Einrückung ist in der 'Gaussian'-Klasse nicht korrekt, daher wird' pretty_string' als lokale Variable in der Methode '__init__' definiert. Stellen Sie sicher, dass '' staticmethod'' und 'def' mit' def' für '_init__', nicht mit' def' für die innere Funktion ausgerichtet sind. – Blckknght