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创建子类是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)
4

2 回答 2

0

利用:

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

否则您打印的repr方法的,而不是调用方法的结果,这是您要查找的字符串。

于 2016-09-29T23:53:57.503 回答
0

我不确定这是否能解决您的问题,因为我现在无法自己检查,但您可能应该使用@abc.abstractstaticmethod(并且显然摆脱self参数)来装饰基类方法。如果那不能解决它,我稍后会删除这个答案。如果它确实解决了它,我会将其编辑为更好的答案。

于 2016-09-30T02:52:44.160 回答