2014-10-31 7 views
2

Я относительно новичок в python, и у меня есть класс, который имеет кучу разных функций. Я читаю в пользовательском вводе, и в зависимости от ввода пользователя я вызываю другую функцию. Вместо того, чтобы иметь кучу If Else заявлений я думал, что было бы лучше иметь словарь функций, так в настоящее время мой класс выглядит следующим образом:Словарь функций для всех функций класса

class Foo: 

    def func1(self): 
    #do something 

    def func2(self, arg1): 
    #do something else 

    def func3(self, arg1, arg2): 
    #do something 

    def func4(self, arg1): 
    #do something 

    def __init__(self): 
    self.functions = {"FUNC2": func2, "FUNC4":func4} 

    def run_loop(self): 
    while 1: 
     user_input = raw_input() 

     cmd = user_input.split(' ')[0] 

     if cmd in self.functions: 
     self.functions[cmd].__get__(self, type(self))() 
     else: 
     #call other functions 

Я звоню это в main.py так:

c = Class() 

c.run_loop() 

Моя проблема в том, что я получаю следующую ошибку: NameError: глобальное имя «func2» не определено`. Я не совсем уверен, почему это происходит. Я получаю ошибку в конструкторе. Есть идеи?

+1

Вы должны использовать 'self.func' в' __init__'. – TidB

ответ

2

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

def __init__(self): 
     self.functions = {"FUNC2": self.func2, "FUNC4":self.func4} 
0

Эта функция не определена в классе. Функция «func2» & «func4» являются частью класса и могут быть переданы с использованием собственного ...

1

Для доступа к функциям класса от других функций одного и того же класса вам необходимо использовать self. Исправленный код будет

self.functions = {"FUNC2": self.func2, "FUNC4":self.func4} 
Смежные вопросы