Pergunta

Tenho um dicionário de métodos em Python que está dentro de uma definição.Esse def é chamado fora da classe usando um objeto.Sempre que o def é chamado, são retornados os resultados do último item do dicionário.Neste caso, recebo os resultados de def spc_summary:.

 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)

Alguém pode explicar o que está acontecendo aqui?Deixe-me saber se mais detalhes são necessários.Obrigado!

Deixe-me adicionar alguns detalhes:O functions.get(filename) está recuperando o último item do dicionário, independentemente do nome do arquivo.Eu fiz isso => functions('spc.php') e ainda retornou resultados para `def spc_summary'.E essas definições não deveriam ter os mesmos resultados.

Foi útil?

Solução

Sua função dict parece estar fazendo a coisa errada.Ao definir seu dict, você está mapeando as chaves para o resultado da função em vez do objeto de função.Se você mapeá-lo para o objeto de função, a função será chamada quando você invocar functions.get(filename)()

Seu ditado provavelmente deveria ser como abaixo:

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
}

Outras dicas

Os dicionários não são ordenados, portanto, o último objeto retornado da iteração sobre um dict provavelmente não será o último item inserido nesse dict.

functions.get(filename) vai pegar o valor atual de filename e procure em functions. filename obtém seu valor de self.phpfile, então no seu exemplo self.phpfile deve ser definido como 'spc_summary.php'.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top