2015-03-03 3 views
-1

У меня возникло непредвиденное сообщение об ошибке, и я понятия не имею, что не так с моим кодом. Следующий мой код.Ошибка с функцией не определена

В классе ClassA определены две функции. Функция A определена и предназначена для записи результатов в файл csv. functionA будет использоваться позже в функции B как часть процесса анализа.

Однако питон возвращает мне NameError: имя «functionA» не определен Кто-нибудь есть какие-либо идеи, почему?

class ClassA: 
    def functionA(readDir, keyword, lst1, lst2): 

     filename = os.path.join(readDir, keyword) 
     filename = filename+'.csv' 

     with open(filename, 'w', encoding='utf-8') as f: 
      writer=csv.writer(f) 
      header=['A', 'B'] 
      header2=['C','D'] 
      writer.writerow(header) 
      writer.writerows(fdist1) 
      writer.writerow(header2) 
      writer.writerows(fdist2) 


    def functionB(self, readDir, keyword): 
     lst=[] 
     function1() 
     function2() 
     function3() 
     function4() 

     fdist1, fdist2=function5() 

     functionA(readDir, keyword, fdist1, fdist2) 

     return fdist1, fdist2 
+0

вы имели в виду 'self.functionA'? Кроме того, если аргумент 'self' для' functionA' не должен быть помечен '@ staticmethod'. – jonrsharpe

+0

'functionA' - это метод экземпляра класса' ClassA'. Вы должны указать объект для его применения, например. 'Self.functionA()'. –

+0

OMG ahahahahahahahahahah Спасибо. Мой разум был где-то в Андромеде, и мои глаза не сработали! Благодаря! –

ответ

0

По STATICMETHOD

Демо:

class ClassA: 
    @staticmethod 
    def functionA(): 
     print "in A" 

    def functionB(self,): 
     print "in B" 
     ClassA.functionA() 

a = ClassA() 
a.functionB() 

Выход:

$ python csv_task.py 
in B 
in A 

По методам экземпляра:

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

Демо:

class ClassA: 
    def functionA(self): 
     print "in A" 

    def functionB(self,): 
     print "in B" 
     self.functionA() 

a = ClassA() 
a.functionB() 

Выход:

$ python csv_task.py 
in B 
in A 
+1

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

+0

@ArnoldChung: Добро пожаловать, просто взгляните на статический метод, это может быть полезно для вас в будущем. –

0

Вы можете использовать следующую

self.functionA(readDir, keyword, fdist1, fdist2) 

и объявить functionA с первым аргументом self как этот

def functionA(self, readDir, keyword, lst1, lst2): 
#   ^^^^^^^ 
0

Поскольку functionA является частью класса ClassA вы должны ссылаться на него с помощью текущий экземпляр, например:

self.functionA(...) 

В вашем случае вызов будет выглядеть следующим образом:

self.functionA(readDir, keyword, fdist1, fdist2) 
Смежные вопросы