2012-02-22 4 views
-1

Я сочинительство класс Python с помощью этого конструктора:Python OO - определение функции член и ключевое слово само

 #constuctor 
def __init__(self, initPt_=[1,1],fun_=Optim_tests.peaks,NITER_=30,alpha_=0.7,NMAX_=5000,FTOL_=10**(-10)): 
    self.initPt = initPt_ 
    self.fun = fun_ 
    self.alpha = alpha_ 
    self.ITER = NITER_ 
    self.NMAX = NMAX_ 
    self.FTOL = FTOL_ 

и определение обеих функций члена:

def buildSimplex(self): 
    self.simplex=[] 
    self.simplex.append([x for x in self.initPt]) 
    for i in range(len(self.initPt)): 
     temp=[x for x in self.initPt] 
     temp[i]=self.initPt[i]+1 
     self.simplex.append(temp) 
    self.npts=len(self.simplex) 

def sA(self): 
    self.buildSimplex() 

При вызове второй функции, происходит ошибка :

NameError: global name 'buildSimplex' is not defined  

У вас есть ключ?

+3

Не могли бы вы предоставить точный код? – Vladimir

+0

Добавлена ​​отсутствующая переменная-член, чтобы оставаться сплоченной. Детали кода приведут к ненужному усложнению кода. – octoback

+1

@dlib Это неправда. Это похоже на проблему определения области (python проверяет глобальное пространство имен для вашей функции), поэтому публикация всего источника класса будет правильной. –

ответ

3

На первый взгляд я бы сказал, что это проблема идентификации, но вам нужно предоставить фактический код для более конкретного ответа.

Причина, по которой я говорю, это из-за ошибки, которую вы получаете. Если вы правильно объявили свой класс и попытаетесь вызвать метод экземпляра, который не определен, вы должны фактически получить: AttributeError: A instance has no attribute 'xxxx'. И вам не нужно заботиться о том, как вы определяете свои методы, если они объявлены в классе. См е Xample из met1 и met4 ниже

Например:

class A(): 
    def met1(self): 
     print self.met4() 

    def met2(self): 
     self.met3() 

    def met4(): 
     print 'x' 


a = A() 
a.met1() 
>>> x 
a.met2() 
>>> AttributeError: A instance has no attribute 'met3' 
0

Ваша ошибка NameError: global name 'buildTool1' is not defined говорит, что вы пытаетесь получить доступ к переменной buildTool1 Буц его не определяют в локальной или глобальной.

Пожалуйста, проверьте это

class test(object): 

    def __init__(self, name): 
     self.name = name 

    def buildSimplex(self): 
     print "CALL" 

    def sA(self): 
     self.buildSimplex() 


if __name__ == '__main__': 
    x = test('test') 
    x.sA() 
+0

Все, я поменял код после ваших замечаний. Есть ли у вас комментарии по новому коду? – octoback

+0

Здесь ваше освобождение работает. Укажите тот же код, который создает проблему. Из вашего кода мы не можем генерировать ошибку сейчас. – Nilesh

+0

Спасибо за ваши комментарии, хотя данная проблема не была хорошо показана. Я понимаю, по крайней мере, что вызов self.buildSimplex() другим способом и правильное использование ключевого слова self. Я буду расширяться, если буду тестировать этот класс. – octoback