在Python中调用另一个方法中的单独方法

时间:2017-08-14 16:46:34

标签: python nameerror scoping

我有多种方法,我不知道如何在Python 3.4中组合在一起。最终,这将是一个方法库,我将它们包装在一个类Estimators中。以下是我到目前为止的情况:

SaveAs

它抛出

class Estimators():
    """some methods for building basic estimators.
        All methods.
    """
    def average(series):
        return float(sum(series))/len(series)

    def moving_average(series, n):
        return self.average(series[-n:])
def main():
    series = [3, 10, 12, 13, 12, 10, 12]
    done = average(series)
    print(done)
    outputmv = moving_averge(series, 2)
    print('this is the moving average:\n %d.2' % outputmv)

另外,我想确保这是正确的架构。 Python中定义多个具有(功能)依赖关系的方法的好习惯是什么?通过功能依赖性我的意思是一些方法可能使用在其范围之外定义的方法。

2 个答案:

答案 0 :(得分:2)

在您的情况下,使用module而不是类似乎更好。模块基本上只是一个单独的python文件。因此,如果您将文件命名为estimators.py并将其中的函数放入其中,则可以从其他文件中导入它们,如下所示:

from estimators import average

series = [3, 10, 12, 13, 12, 10, 12]
done = average(series)

编辑以回复评论:

如果您的estimators.py文件看起来像这样,您应该导入移动平均功能:

def average(series):
    return float(sum(series))/len(series)

def moving_average(series, n):
    return average(series[-n:])

请注意,我将self.average更改为average,因为self指的是类的实例,而这些函数不在类中。

答案 1 :(得分:1)

@ user257297关于staticmethods的说法是正确的,尽管在调用该方法之前你还必须先调用该类。我建议两个选择:

第一个是将你的主要改为:

def main():
    series = [3, 10, 12, 13, 12, 10, 12]
    done = Estimators.average(series)
    print(done)
    outputmv = Estimators.moving_averge(series, 2)
    print('this is the moving average:\n %d.2' % outputmv)

并将@staticmethod添加到方法定义中。 另一个是修改你的类并从Estimators实例化一个对象并以这种方式调用方法:

class Estimators():
    """some methods for building basic estimators.
        All methods.
    """
    def average(self, series):
        return float(sum(series))/len(series)

    def moving_average(self, series, n):
        return self.average(series[-n:])

并以这种方式打电话:

...    
estimators = Estimators()
estimators.average(series)
...