2013-07-30 6 views
0

У меня есть питон скрипт, который вызывает NeoprobeApp.py подобающее функцию в Parameter.pyParameter.py приводятся нижеPython загрузка класс из другого файла

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) 

Я импортировать пригодную функцию успешно 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 

Что я делаю неправильно?

+0

я не уверен, почему этот вопрос заслуживает вниз голосование – moadeep

+0

Downvoted, потому что это материал начального уровня, который обрабатывается в каждом учебнике python, который посвящен оператору 'import'. Ошибка также должна быть очень понятной - ваш скрипт не знает ничего с именем «Параметр». Любая хорошая IDE (например, vim + pyflakes) уведомила бы вас об этой ошибке _before_ запуска кода. Кроме того, вы, похоже, понимаете, что вам нужно импортировать функцию 'fit', почему вы считаете, что класс' Parameter' является особым и его не нужно импортировать? – l4mpi

ответ

7

Вы просто импортируете функцию fit, но не класс Parameter.

Использование

from Parameter import fit, Parameter 

вместо того, чтобы просто

from Parameter import fit 
2

fit Как и Parameter просто имена обозначающие вещи в Parameter модуле. Эти имена могут быть связаны ни с чем. В этом случае fit привязан к функции, а Parameter привязан к классу. Список имен, доступных в любой точке кода, определяется областью имен. Оператор import переносит имена из других областей в вашу текущую область.

BTW: В python модули должны быть названы строчными буквами. А «Модуль», как правило, содержимое файла питона, так что вы должны действительно назвать файл parameter.py и тогда ваш оператор импорта будет:

from parameter import fit, Parameter 
Смежные вопросы