Я пытаюсь сделать текстовую приключенческую игру и дошел до того, что определил словарь в классе 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 предыдущего примера.
Я не знаю, почему это происходит, и если это невозможно исправить, как я смогу добиться аналогичного эффекта (моя цель - ввести разные ключи в словарь, а затем выполнить соответствующие функции).
Спасибо за помощь.
()
означает вызов этой функции. Вы вызываетеmyClass.my_function()
внутри определения dict в__init__
. Если вы не хотите вызывать его там, переместите()
в то место, где вы хотите его вызывать. - person khelwood   schedule 14.01.2021