2012-03-13 3 views
0

У меня есть словарь методов в Python, который находится внутри определения. Этот def вызывается вне класса с использованием объекта. Всякий раз, когда вызывается def, я возвращаю результаты последнего элемента в словаре. В этом случае мне возвращаются результаты def spc_summary:.Как получить значения словаря в Python?

def setStyles(self): 
    # Assign function to file 
    functions = { 
      'app_server.php':self.app_server(), 
      'dcrm2nlyte.php':self.dcrm2nlyte(), 
      'export.php':self.export(), 
      'host_server.php':self.host_server(), 
      'spc.php':self.spc(), 
      'spc_approved.php':self.spc_approved(), 
      'spc_approved_by_dc.php':self.spc_approved_by_dc(), 
      'spc_by_dc.php':self.spc_by_dc(), 
      'spc_complete.php':self.spc_complete(), 
      'spc_summary.php':self.spc_summary() 
    } 

    filename = self.phpfile 
    functions.get(filename) 

Может кто-нибудь объяснить, что здесь происходит? Позвольте мне знать, требуется ли более подробная информация. Благодаря!

Позвольте мне добавить несколько деталей: functions.get(filename) возвращает последний элемент словаря, независимо от имени файла. Я сделал это =>functions('spc.php'), и он по-прежнему возвращает результаты для `def spc_summary '. И эти def должны не иметь одинаковых результатов.

+0

Какова цель словаря 'functions'? Вы пытаетесь вызвать функцию, чье имя хранится внутри 'phpfile'? – hochl

+5

Строки '' spc_summary.php: self.spc_summary() должны быть без таких символов, как '' spc_summary.php ': self.spc_summary' и в 'functions.get (filename)' вы должны использовать 'functions.get (filename)() ' –

+0

Да, вы эффективно вызываете все эти функции-члены при построении словаря ** при каждом вызове метода **. – hochl

ответ

2

Ваша функция dict, кажется, делает неправильную вещь. Определяя ваш dict, вы сопоставляете ключи с результатом функции вместо объекта функции. Если сопоставить его функции объекта функция вызывается при вызове functions.get(filename)()

Ваш ДИКТ должен, вероятно, как показано ниже:

functions = { 
     'app_server.php':self.app_server, 
     'dcrm2nlyte.php':self.dcrm2nlyte, 
     'export.php':self.export, 
     'host_server.php':self.host_server, 
     'spc.php':self.spc, 
     'spc_approved.php':self.spc_approved, 
     'spc_approved_by_dc.php':self.spc_approved_by_dc, 
     'spc_by_dc.php':self.spc_by_dc, 
     'spc_complete.php':self.spc_complete, 
     'spc_summary.php':self.spc_summary 
} 
0

Словари неупорядоченны, поэтому последний объект, возвращаемый из итерацию над Словаре будет вероятно, не последний элемент, вставленный в этот dict.

functions.get(filename) собирается принять текущее значение filename и посмотреть его в functions. filename получает свое значение от self.phpfile, поэтому в вашем примере self.phpfile должно быть установлено значение 'spc_summary.php'.