Почему моя функция вызывается внутри словаря в классе __init__() при вызове класса?

Я пытаюсь сделать текстовую приключенческую игру и дошел до того, что определил словарь в классе init, внутри которого была ссылка на функцию позже внутри класса. Я ожидал, что программа будет выполнять функцию всякий раз, когда я вызываю функцию с помощью ключа словаря, но она выполняется автоматически при вызове класса.

Вот моя минимальная воспроизводимая ошибка:

class myClass:

  def __init__(self):

    self.my_dictionary = {
      "key": myClass.my_function()
    }
  
  def my_function():
    print("here")

myClass() 

печатает: here, когда я ожидаю, что ничего не будет напечатано.

То, что я хотел, было бы примерно так:

class myClass:

  def __init__(self, input):

    self.input = input

    self.my_dictionary = {
      "key": myClass.my_function(),
      "ooo": 0
    }

    self.my_dictionary[self.input] # if the input is "key" then this should activate myClass.my_function()
  
  def my_function():
    print("here")

myClass("key") # SHOULD activate myClass.my_function()
myClass("ooo") # should NOT activate myClass.my_function()

Но это печатает here \n here.

Я провел тесты в другом своем проекте и обнаружил, что функция вызывается, когда она помещается в словарь, то есть в строке 7-8 предыдущего примера.

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

Спасибо за помощь.


person Maxijazz    schedule 14.01.2021    source источник
comment
() означает вызов этой функции. Вы вызываете myClass.my_function() внутри определения dict в __init__. Если вы не хотите вызывать его там, переместите () в то место, где вы хотите его вызывать.   -  person khelwood    schedule 14.01.2021
comment
@khelwood ага, да! Большое спасибо за Вашу помощь.   -  person Maxijazz    schedule 14.01.2021