Python словарь функций вызывает каждую функцию - PullRequest
0 голосов
/ 14 марта 2020

Это кажется очень тривиальным, но по какой-то причине мой словарь не работает.

У меня есть такой код:

class Calculator():
    def __init__(self):
        number = input()
        self.switch_case(number)

    def switch_case(self, number):
        switcher = {
            1: self.one(),
            2: self.two(),
        }

    def one(self):
        print("something")

    def two(self):
        print("something")

По некоторым причинам это вызывает обе функции one () и два (), даже когда я только вводю значение 1 в качестве ввода.

Ответы [ 2 ]

1 голос
/ 14 марта 2020

На самом деле это ничего не вызывает. Ваш представленный код никогда не запускается.

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

Если вы не хотите запускать их в этот момент, удалите скобки:

switcher = {
        1: self.one,
        2: self.two,
        }

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

self.switcher[1]()

Обратите внимание на (), который будет выполнять вызов.

1 голос
/ 14 марта 2020

Когда вы создаете словарь, сначала вызываются эти методы =, поэтому вы видите что-то дважды, затем значения, которые возвращаются из методов, присваиваются dict (в этом случае None, потому что методы только выводят на печать, ничего возвращается).

...