Python从另一个文件加载类

时间:2013-07-30 08:40:56

标签: python

我有一个python脚本NeoprobeApp.py,它在Parameter.py Parameter.py中调用拟合函数,如下所示

from scipy import optimize
import numpy as np

class Parameter:
    def __init__(self, value):
            self.value = value

    def set(self, value):
            self.value = value

    def __call__(self):
            return self.value

def fit(function, parameters, y, x = None):
    def f(params):
        i = 0
        for p in parameters:
            p.set(params[i])
            i += 1
        return y - function(x)

    if x is None: x = arange(y.shape[0])
    p = [param() for param in parameters]
    optimize.leastsq(f, p)

我成功导入了fit函数from Parameter import fit。但是,当我尝试初始化我的参数时

# Define initial parameters of Gaussian fit
        mu = Parameter(0)
        sigma = Parameter(20)
        height = Parameter(1)

        #define Gaussian fit function
        def f(angles): return height() * exp(-((angles-mu())/sigma())**2)

        fit(f, [mu, sigma, height], n_col_cnts)

我收到错误消息

Traceback (most recent call last):
  File "NeoprobeApp.py", line 228, in OnPlot
    mu = Parameter(0)
NameError: global name 'Parameter' is not defined

我做错了什么?

2 个答案:

答案 0 :(得分:7)

您只需导入fit函数,但不导入Parameter类。

使用

from Parameter import fit, Parameter

而不仅仅是

from Parameter import fit

答案 1 :(得分:2)

fitParameter只是表示Parameter模块中的内容的名称。这些名字可以绑定任何东西。在这种情况下,fit绑定到一个函数,Parameter绑定到一个类。代码中任何位置都可访问的名称列表由名称范围定义。 import语句将其他范围的名称带入当前范围。

BTW:在python中,模块应该命名为小写。 “模块”通常是python文件的内容,因此您应该将文件命名为parameter.py,然后您的import语句将为:

from parameter import fit, Parameter